想知道为什么有补码,首先我们来考虑一下计算机怎么计算减法。
我们知道,计算机中只有加法器,也就是说只能计算加法。那么如何计算减法呢?首先想到的是把减法 换成 负数加法,那么怎么表示负数呢?当然是表示成正数的相反数了。
以4位的运算器为例子:如果1表示为0001,那么 -1表示为1110就是理所当然的了,为了方便称呼,起了个名叫反码。表里可以清晰的看出其实-1就是1的按位取反。
十进制 | 四位的二进制 |
---|---|
1 | 0001 |
-1 | 1110 |
有了反码还不够嘛?不够的,因为存在这样的问题,0怎么处理?
如果把0当作正数,那么0表示为0000,-0就得表示为1111,这样0就有了两种表示方法,0不等于-0,显然是不合理的,那么怎么解决这个问题呢?
让1111的含义不再是-0,而是-1不就好了。原本-1表示为1110,现在我们希望-1表示为1111,就是在原来的基础上加了1。
0的问题解决了,但是这种改动也影响了所有负数的表示方法,因此对于负数,我们需要把他们加1。这也就形成了所谓“补码”的计算方法。
到此为止就结束了,理解了之后,就再也不用死记硬背那些转换规则了,你甚至可以脱口而出,-1的二进制为全1(16进制为:0xFFFFFF),因为-1取代了-0的位置。
希望本文可以帮助到你,欢迎批评指正。