以下的原码反码补码以java的Integer(32位)整数为例,最高位是符号位,0表示正数,1表示负数
- 原码
原码是整数的二进制加上最高位符号位,例如:2的二进制是10,+2的原码是00000000000000000000000000000010,-2的原码是10000000000000000000000000000010,可以看到,这里其实就是在2的二进制的基础上把第32位根据正负设置为0和1
- 反码
正数反码和原码一样,负数的反码是符号位不变,其余位取反,例如:+2的反码是00000000000000000000000000000010,-2的反码是11111111111111111111111111111101
- 补码
正数补码和原码一样,负数的补码是对反码进行+1操作,例如:+2的补码是00000000000000000000000000000010,-2的补码是11111111111111111111111111111110
计算机是以补码作为存储单位来计算的,而平常我们看到的整数是原码形式的,之所以这样是为了解决减法和0编码不唯一的问题