在计算机中,二进制数值是以补码的形式存储的,并且简化了减法运算,把减法转化成了加法运算;所以需要把二进制数作为补码的形式存储起来方便计算;
比如1-1的运算,在底层是转换成1+(-1)去操作的:
1、正数的原码、反码、补码都是一样的,
例如int类型的数据,在大多jvm中,是32位存储的,
正整数1的原码形式 , 00000000 00000000 00000000 00000001
由于是正数反码、补码也一样:00000000 00000000 00000000 00000001
2、我们再来看负数-1的存储形式,
-1的原码:10000000 00000000 00000000 00000001(负数最高位用1表示)
如果用-1的原码去和上面的正整数1相加的话,我们得到的结果不是0;
00000000 00000000 00000000 00000001
10000000 00000000 00000000 00000001
结果:10000000 00000000 00000000 00000010
所以需要先把-1原码取反,得到11111111 11111111 11111111 11111110,
然后加1得到补码:11111111 11111111 11111111 11111111,
用补码去计算,这样去和正整数1相加,结果得到的是0:
11111111 11111111 11111111 11111111
00000000 00000000 00000000 00000001
结果:00000000 00000000 00000000 00000000