ipk*_*iss 21 c binary processor cpu-registers
我正在读一些C文本.在"否定"和"正面价值"会话中,作者提到了以二进制形式表示负数的几种方法.
我一直都明白,并且想知道如果给出二进制数,我们能否确定它是否为负数?
例如,-92具有8位二进制形式:10100100.但是如果我们给出的话我们10100100可以说是-92,而不是其他非负数吗?
Stu*_*tLC 15
例如,(数字)-92具有二进制形式:10100100(以8位字节表示).但是,如果给出10100100,我们可以说是-92,而不是其他非负数吗?
不,您需要事先知道是否已使用已签名或未签名的存储来存储该号码,您还需要知道用于存储该号码的编码.
如果8位整数(即字节)被签名,那么根据Tom和32bitkid,有符号整数通常存储在2的补码中,其中最高有效位(MSB)将确定数字是否为负数.
例如,在您的示例中,字节10100100可以表示带符号的字节 -92,因为:
MSB : 1 means negative
Other 7 Bits 0100100
Flip and add 1 => 1011011 + 1 = 1011100
From powers of two, right to left :
0*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 0*2^5 + 1*2^6
= 4 + 8 + 16 + 64
= 92 (and thus -92 because of the MSB)
Run Code Online (Sandbox Code Playgroud)
或者,如果该值是无符号字节,则MSB仅被视为2的下一个幂,与所有低位相同,即10100100可以表示:
(再次,权力为2,从右到左,并省略0两个权力)
4 + 32 + 128
= 164
Run Code Online (Sandbox Code Playgroud)
关于整数是否应该签名的决定通常取决于您需要存储在其中的值的范围.例如,32位有符号整数可以表示范围:
–2147483648 to 2147483647
Run Code Online (Sandbox Code Playgroud)
无符号32位整数可以表示来自的数字
0 to 4294967295
Run Code Online (Sandbox Code Playgroud)