9

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

我误会了什么?

4

3 回答 3

12

问题是你试图用 8 位来表示 240。8 位有符号数的范围是 -128 到 127。

如果你用 9 位来表示它,你会看到你得到了正确的答案:

011110000 (240)

100001111 (flip the signs)
+
000000001 (1)

=

100010000

=

-256 + 16 = -240
于 2012-02-07T06:59:00.760 回答
4

您是否忘记了 -240 在签名时不能用 8 位表示?

于 2012-02-07T06:57:16.023 回答
3

您可以用 8 位表示的最小负数是 -128,即10000000.

使用 2 的补码:

128 = 10000000
(翻转)= 01111111
(加 1) = 10000000

您可以用 N 位(当然是有符号整数)表示的最小负数始终是- 2 ^ (N - 1).

于 2012-02-07T06:54:56.167 回答