What function returns (as an integer) the number of bits in a data type or class, e.g. returns 16 for 'int16' or 'uint16' variables, 32 (or whatever) for 'float' types, etc.?
조회 수: 63 (최근 30일)
이전 댓글 표시
The MATLAB function intmax() is close, but is only defined for integer types up to 32 bits. The function class() returns type variable type, but metainformation has to be inferred from documentation for the particular version of MATLAB after that.
Is there a function that returns the native bit size (i.e. the number of bits used for internal storage), or even more useful, all metadata about a given variable or class?
An extension to the function might return other metadata about the variable type, e.g. IEEE format, number of bits, signed/unsigned, etc.
Here's how it might work:
A = uint64(1234);
varinfo(A)
ans =
64
[nBits, meta] = varinfo(A)
nBits =
64
meta =
class = 'uint64'
nBits = 64
signed = 0
value = 1234
format = 'IEEE ...
nExp = 0
nMantissa = 64
max = {actual intmax for the type}
min = {actual minimum value > 0}
{and other useful metadata about the variable)
I'm really hoping something like this already exists...
댓글 수: 1
Star Strider
2019년 4월 11일
The whos function is probably as close as you can currently get to what you want.
채택된 답변
Stephen23
2019년 4월 11일
편집: Stephen23
2019년 4월 11일
>> A = single(0);
>> S = whos('A');
>> S.class
ans = single
>> S.bytes*8
ans = 32
If you have non-scalar arrays to get the bits (or bytes) per element simply divide by the number of elements (does not work for empty arrays), or use cast:
B = cast(0,S.class)
S = whos('B');
S.bytes*8
S.class
댓글 수: 0
추가 답변 (1개)
James Tursa
2019년 4월 11일
편집: James Tursa
2019년 4월 11일
I think everything that MATLAB runs on currently uses IEEE single and double floating point formats. And the signed integer formats are two's complement storage. Char is actually two bytes per value. Logical is one byte per value. Differences would be big or little endian. So you could easily write a function that gives all of this info, but most of the results would be the same across all platforms for a given class.
What would you use such a function for?
댓글 수: 3
Walter Roberson
2021년 6월 7일
Side note: in some recent releases, Apple M1 has been supported. It is a 64 bit ARM CPU.
Microsoft is working on a 64 bit ARM operating system, but at the moment it is quite unreliable, and their 32 bit ARM is more stable but not great.
... so the list of architectures supported these days has to include ARM
참고 항목
카테고리
Help Center 및 File Exchange에서 Get Started with MATLAB에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!