首先需要了解原码、反码和补码的概念:
对于正数:反码、补码都与原码一样。
如:40
- 原码:00101000
- 反码:00101000
- 补码:00101000
对于负数:反码:原码中除去符号位,其他的数值位按位取反,即0变1,1变0,补码:反码+1
如:-107:
- 原码:1 1 1 0 1 0 1 1
- 反码:1 0 0 1 0 1 0 0
- 补码:1 0 0 1 0 1 0 1
为什么要设计补码
上面介绍了原码、反码和补码三者的概念,那么,计算机中为什么要设计补码这一概念呢?因为直接用原码涉及到减法操作,这就增加了计算机底层电路涉及的复杂性。而用补码操作时,当减去一个数时,可以看做加上一个负数,然后转变位加上这个负数的补码。即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了.
计算举例(byte):1+(-1)=0
- 1在计算机存储为0000 0001
-1为1000 0001——>反码为1111 1110——>补码(反码+1)1111 1111
- 所以-1在计算机存储为1111 1111
即0000 0001 + 1111 1111=1 0000 0000因为byte只有8bit位所以最后结果为0000 0000