我们在学计算机基础时就讲到了,在计算机中负数是用补码表示的,但为什么呢?即使做了6年程序员,我仍然不知道,直到我看了《哈佛大学公开课:计算机科学cs50》。通俗点讲来,使用补码是因为:
计算机中统一加法和减法,使得类似于(-5)+(5)最终可以得到0。
比如我们用8bit来表示数字,那么(-5)和(+5)分别表示为:
0000,0101
1111,1011
我们采用计算机中加法的方式就可以得到(1,0000,0000),这里我们使用8bit来表示数字所以最高位的1被丢弃,所以就得到0。
我们再看看补码是怎么得到的,(-5)的补码就是(+5)的反码加1得到的。这也是一个反向过程,即:取反可以得到形如(1111,1111)的表示,那么再加1的话,正好可以得到(0000,0000)的表示(丢弃了最高位)。为了加深印象我们看看看(+5)+(-2),它们的二进制表示分别为:
0000,0101 =>(+5)
1111,1110 =>(-2)
我们二进制加法的结果自然就是:(1,0000,0011),最高位的1被丢弃,那么结果正好就是3的二进制表示。
Comments: