原码反码补码

35 阅读1分钟

以下的原码反码补码以java的Integer(32位)整数为例,最高位是符号位,0表示正数,1表示负数

  1. 原码

原码是整数的二进制加上最高位符号位,例如:2的二进制是10,+2的原码是00000000000000000000000000000010,-2的原码是10000000000000000000000000000010,可以看到,这里其实就是在2的二进制的基础上把第32位根据正负设置为0和1

  1. 反码

正数反码和原码一样,负数的反码是符号位不变,其余位取反,例如:+2的反码是00000000000000000000000000000010,-2的反码是11111111111111111111111111111101

  1. 补码

正数补码和原码一样,负数的补码是对反码进行+1操作,例如:+2的补码是00000000000000000000000000000010,-2的补码是11111111111111111111111111111110

计算机是以补码作为存储单位来计算的,而平常我们看到的整数是原码形式的,之所以这样是为了解决减法和0编码不唯一的问题