How can I convert a negative integer to a binary string, in other words, how can I find Two's Complement in MATLAB?
조회 수: 59 (최근 30일)
이전 댓글 표시
MathWorks Support Team
2013년 6월 26일
댓글: Walter Roberson
2020년 10월 2일
DEC2BIN converts non-negative decimal integers to a binary string. I want to create binary strings, with a leading sign bit, from any (negative or positive) integer.
채택된 답변
MathWorks Support Team
2013년 6월 26일
This can be accomplished using the TYPECAST function. For example, to find a binary string for 'n' with respect to 8-bit two's complement, you can use the command,
dec2bin(typecast(int8(n),'uint8'))
댓글 수: 6
Walter Roberson
2020년 10월 1일
You cannot get back the correct number if you convert -5.82 to fewer bits.
value = -5.82;
bits32 = dec2bin(typecast(single(value),'uint32'))
retrieved = typecast(uint32(bin2dec(bits32)),'single');
value - retrieved
ans =
single
1.716614e-07
The best retrieved value you can get differs from the original by about 3 parts per billion.
Walter Roberson
2020년 10월 2일
Sure there are other ways to generate 32 bit representations of double precision numbers, but think about this for a moment:
There are at most 2^32 different 32 bit numbers.
In double precision, for any given floating point mantissa, there are 52 bits of fraction, so thare are at least 2^52 different double precision numbers. For example 1 + (0:2^52-1)/2^53 constructs 2^52 different double precision floating point numbers with the same mantissa:
>> num2hex(1)
ans =
'3ff0000000000000'
>> num2hex(2-eps)
ans =
'3fffffffffffffff'
>> log2(eps)
ans =
-52
By the Pigeon Hole principle, it is obvious that you cannot come even close to representing all possible double precision numbers in 32 bits. No matter what encoding you use for the 32 bits, there are at most 2^32 different states, and that is not enough to encode 2^52 different values.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Data Type Conversion에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!