我正在阅读计算机体系结构书籍,并发现了以下内容:
假设您有一个8位的单元格。所以有256个可能的整数值。非负数从0到127.假设两个补码二进制表示,97 + 45的总和是多少?
无符号显然是142,你可以用十进制97 + 45或者:
0110 0001
0010 1101 ADD
--------------
1000 1110
但是当你执行两个补码时,你得到结果(1000 1110
)并确定它是负数,因为符号位是1.然后取一个补码:
NOT 1000 1110 = 0111 0001
然后确定它的两个补码:
0111 0001
0000 0001 ADD
--------------
0111 0010
此号码为114
但由于我们的原始号码在符号位中有1
,因此它为-114
。
问题(S):
为什么要找到-114
找到两个补码的麻烦呢?从97和45开始,为什么不只是找到两个正整数之和作为无符号值,该值符合8位单元格范围(1111 1111
为255
)。这只是因为问题要求两者的补充吗?
-114
是否等同于142
?我相信如果你采用两个补数行,你得142-256
即-114
。从这一点来说,我不明白为什么如果要总结两个正值,你甚至想要使用两个补码!
答案 0 :(得分:1)
1的补码只是意味着翻转所有位,2的补码意味着否定值。因此,255 - x
和256 - x
中的2&#s有效地补充了8位结果。您可以通过1补码并添加1
来获得2补码的结果。
8位中的142
等于-114
。别对此感到困惑。