到这里,我们发现原码,反码的问题,补码基本解决了。
在补码中也不存在负零了,因为1000表示-8
这是因为根据上面的补码图,做减法时,0001(1)+1111(-1)=0000
我们再也不需要一个1000来表示负0了,就把它规定为-8
负数与负数相加的问题也解决了1111(-1)+1110(-2)=1101(-3)
可能说得有点绕,但是实在是没办法。其实我觉得补码还可以这样画。
很优美有没有,如果你想想地理课本,0不就相当于本初子午线,-8不就是180°,而正数相当于西经,负数相当于东经。
(七)为何这样求补码
然后我们再来看看为什么负数的补码的求法为什么是反码+1
因为负数的反码加上这个负数的绝对值正好等于1111,再加1,就是1000,也就是四位二进数的模
而负数的补码是它的绝对值的同余数,可以通过模减去负数的绝对值,得到他的补码。
所以 负数的补码就是它的补码+1。
有点绕吧,只能说很难算清楚,你们还是自己算算吧。还有上面我提到的另外一种算法。
接下来,我要说一下我自己算补码的小技巧。
看上面那个图。
如果我们把-8当成负数的原点。那么-5的补码是多少呢?
-5=-8+3
-5的补码就是-8的补码加3
1000(-8) +0011(3)=1011(-5)
所以完全可以口算出-5的补码是1011
当然,也可以记住-1的补码是1111口算减法得出
对于八位加法器的话,可以把-128当补码原点。十六位可以把-32768当补码原点。
是的,128是256(八位二进制数的模)的一半,32768是65536(十六位二进数的模)的一半
也很方便有没有,而且简单的是
补码原点总是最高位是‘1’,其他位是‘0’
所以做加法总是简单得可以口算。
|