我使用2'补码来表示二进制形式的负数
案例1:数字-5
根据2'补充技术:
将5转换为二进制形式:
00000101然后翻转位
11111010,然后加1
00000001
Run Code Online (Sandbox Code Playgroud)
=>结果: 11111011
为了确保这是正确的,我重新计算到十进制:
-128 + 64 + 32 + 16 + 8 + 2 + 1 = -5
Run Code Online (Sandbox Code Playgroud)
案例2:数字-240
采取相同的步骤:
11110000
00001111
00000001
00010000 => recalculate this I got 16, not -240
Run Code Online (Sandbox Code Playgroud)
我误会了什么?
Spe*_*esk 12
问题是你试图用只有8位代表240.8位有符号数的范围是-128到127.
如果你用9位代表它,你会看到你得到正确的答案:
011110000 (240)
100001111 (flip the signs)
+
000000001 (1)
=
100010000
=
-256 + 16 = -240
Run Code Online (Sandbox Code Playgroud)