1、原码:(此处数值示例使用1个字节表示)
数值3的原码为:0000 0011
数值-3的原码为:1000 0011
注解:原码使用字节的最高位表示符号值:0代表正数,1代表负数,剩下的表示该数的绝对值二进制数。如果在此基本上进行加法运算,则3 + (-3) => 0000 0011 + 1000 0011 = 1000 0110 => -6,实际结果并不符合逻辑,所以在计算机上使用原码表示法有局限性
2、反码:
数值3的反码为:0000 0011
数值-3的反码为:1111 1100
注解:正数的反码和原码相同,负数的反码转为规则为最高位符号位保留,对其它位进行按位取反。则3 + (-3) => 0000 0011 + 1111 1100 => 1111 1111 => -127,实际结果也不符合逻辑,使用反码表示也不可行
3、补码:
数值3的补码为:0000 0011
数值-3的补码为:1111 1100 + 1 => 1111 1101
注解:正数或0则补码与其原码相同;负数则先获取其绝对值的二进制数,再按位取反,最后加1得到该数的补码。3 + (-3) => 0000 0011 + 1111 1101 => 0000 0000 => 0,符合逻辑满足要求,因此计算机是以补码形式来表示数值的。
引申:减法计算都可以转为正数加负数的形式,在此基础上,计算机cpu的电路设计上就可以不必设计减法器电路了,只需设计加法器电路,也简化了电路设计。
(1) 1 + (-1) = 0
=> 0000 0001 + ? = 0000 0000
=> ? = 1111 1111 (是某个负数的补码,先减去1得到1111 1110,再按位取反1000 0001,即-1的原码)
(2) 2 + (-2) = 0
=> 0000 0010 + ? = 0000 0000
=> ? = 1111 1110 (减1得1111 1101,按位取反得1000 0010,即-2的原码)
() 3 + (-3) = 0
=> 0000 0011 + ? = 0000 0000
=> ? = 1111 1101 (减1得1111 1100,按位取反得1000 0011,即-3的原码)