用2'补码技术代表负数?

时间:2012-02-07 06:51:48

标签: twos-complement

我使用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

我误解了什么?

3 个答案:

答案 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)