使用2'补码技术表示负数?

9

我使用二进制补码来表示负数。

案例1:数字-5

根据二进制补码技术:

将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个回答

12

问题在于你尝试用只有8位的二进制数来表示240。8位有符号数字的范围是-128到127。

如果你改为使用9位二进制数,你将得到正确的答案:

011110000 (240)

100001111 (flip the signs)
+
000000001 (1)

=

100010000

=

-256 + 16 = -240

4

你是否忘记了,当-240被标记为有符号数时,无法用8位表示?


3

你可以用8个位表示的最小负数是-128,它是10000000

使用二进制补码:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接