如何在2的补码中减去9和-10?

时间:2016-06-22 06:47:45

标签: binary twos-complement

有人可以告诉我在9和-10后如何完成两个补充。

表示9二进制值= 1001
10二进制值= 1010

为-10 = 0110

取两个补码

9 = 1001和-10 = 0110它最终成为1111。 = 15

但答案将来-1

2 个答案:

答案 0 :(得分:3)

简短的答案是-10不能用两位恭维中的4位有符号整数表示。你得到溢出 - 注意0110的符号位是0! (对于9也是如此 - 注意符号位是1。)

真正的答案是,如果您手动执行此操作,则需要分配足够大的缓冲区来处理输入(和输出)。例如,如果你使用8位,那么应该清楚发生了什么:

  • 9 = 00001001
  • -10 =赞美00001010 = 11110101 + 00000001 = 11110110
  • 00001001 + 11110110 = 11111111 = -1

现在,如果你忽略了溢出,那么数学背后的逻辑仍然有效:

对于4位有符号整数,

1111不是15。 符号位(最高有效位)为1 表示它是负数,因此您需要将其解释为两个恭维负数,在本例中为-1。

请注意,对于4位无符号整数,1111为15,以及更大的有符号整数(实际上为00...01111且符号位为0)。

值得注意的是,如果你将相同的数字解释为无符号,那么数学仍然有效。因此,两个人的赞美之美:

  • 二进制:1001 + 0110 = 1111
  • 签名(溢出):9(!)+ -10(!)= -1
  • 未签名:9 + 6 = 15
  • 签名(正确):-7 + 6 = -1

因此,在整个操作/程序中,您必须保持一致的签名。 在你的陈述" 9 = 1001和-10 = 0110,它最终成为1111. = 15"你正在混合一个有符号的解释(-10 = 0110) - 忽略当然溢出 - 用无符号解释(1111 = 15),这会导致错误。

答案 1 :(得分:2)

结果不正确的主要原因是因为使用4位数字,您只能表示数字-8到7.如果要在2的补码中写入9和-10,则需要5位(即0100110110)。

然后,01001 + 10110 = 11111 = -1。