有人可以告诉我在9和-10后如何完成两个补充。
表示9
二进制值= 1001
10
二进制值= 1010
为-10 = 0110
9 = 1001
和-10 = 0110
它最终成为1111
。 = 15
但答案将来-1
答案 0 :(得分:3)
简短的答案是-10不能用两位恭维中的4位有符号整数表示。你得到溢出 - 注意0110
的符号位是0! (对于9也是如此 - 注意符号位是1。)
真正的答案是,如果您手动执行此操作,则需要分配足够大的缓冲区来处理输入(和输出)。例如,如果你使用8位,那么应该清楚发生了什么:
00001001
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位(即01001
和10110
)。
然后,01001
+ 10110
= 11111
= -1。