背景知识:
原码,反码,补码,‘移码’,反码只是原码转变成补码的一个中间状态值,在计算机中无其他用处。
正数的原码,反码,补码相同。
负数的反码是原码取反(符号位不变),负数的补码是其反码加1(符号位不变)。
要了解反码,先要了解补数。
减法计算例子,正15加上负15 15+(-15)=0
15的二进制为00001111(最高位为符号位),-15的二进制为10001111(最高位为符号位),两者相加等于10011110为-30,与理论结果不符。
换位思考,时钟10点处要移到7点处,有两种方式,顺时钟9小时,逆时针3小时,如图所示
补数的定义,
负数取模
小结
一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身来得到。
一个正数和一个负数互为补数时,两数的绝对值之和为模
正数的补数为其自身。
计算
回到正15加上负15 15+(-15)=0
15的原码二进制为0000 1111(最高位为符号位),-15的原码二进制为1000 1111(最高位为符号位),-15的反码二进制为1111 0000(最高位为符号位),
15的原码加-15的反码等于0000 1111+1111 0000=1111 1111为-127(符号位参与计算),只有在1111 1111基础上再加0000 0001才会变成1 0000 0000(去掉最高位,得0),所以可以将反码加1变成补码(符号位不变)。
补码的作用
将计算机中的减法计算变成了加法计算,不用计算机中设计减法器,用硬件电路同时实现加法器和减法器较复杂。
只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补数来表示,因此只要有加法电路及补数电路即可完成各种有符号数的加法及减法,电路设计上相当方便。