我们假设不使用补码在计算机的运算中会发生什么,以一个简单数学算式7-6=1来分析
1,使用原码
7 的二进制原码 :0 000 0111 其中最高一位表示符号位
-6的二进制原码 :1 000 0110
二者做相加运算
0 000 0111
+1 000 0110
1 000 1100
这个结果 符号位是1 表示是一个负数。明显结果有误
2,使用反码
7 的二进制反码:0 000 0111
-6的二进制反码 1 111 1001
二者做相加运算
0 000 0111
+1 111 1001
1 0 000 0000
计算产生了进位,最高位溢出,舍弃。结果就是 0 000 0000.这个结果也是不合理。和十进制的运算结果不一致。
但是我们发现如果在这个结果上再加上1,就是我们想要的结果了。这个问题是不是具有一般性? 再随便举个例子8-5=3
8的原码&#

本文通过分析7-6=1的运算过程,探讨了在计算机中如果不使用补码,原码和反码运算会出现的问题。补码解决了原码和反码运算导致的错误结果,使得正负零表示一致,并有效利用位数表示更多十进制数,特别是避免了负数表示的额外开销。
最低0.47元/天 解锁文章
587

被折叠的 条评论
为什么被折叠?



