我使用2'补码表示二进制形式的负数
案例1 :号码-5
根据2'补充技术:
将5转换为二进制形式:
00000101
,然后翻转位
11111010
,然后添加1
00000001
=>结果:11111011
为了确保这是正确的,我重新计算到十进制:
-128 + 64 + 32 + 16 + 8 + 2 + 1 = -5
案例2 :号码-240
采取相同的步骤:
11110000
00001111
00000001
00010000 => recalculate this I got 16, not -240
我误解了什么?
答案 0 :(得分:12)
问题是你试图用8位代表240。 8位有符号数的范围是-128到127.
如果你用9位代表它,你会看到你得到正确答案:
011110000 (240)
100001111 (flip the signs)
+
000000001 (1)
=
100010000
=
-256 + 16 = -240
答案 1 :(得分:4)
你有没有忘记-240在签名时不能用8位表示?
答案 2 :(得分:3)
您可以用8位表示的最低负数是-128,即10000000
。
使用2的补码:
128 = 10000000 (flip) = 01111111 (add 1) = 10000000
你可以用N位表示的最低负数(当然是有符号整数)总是- 2 ^ (N - 1)
。