转自:https://blog.youkuaiyun.com/yuling112358/article/details/7838916
java中整型数据存储时是以补码的方式进行的。
1.何为原码,反码,补码?
首先java中的整型数值都是有符号的,规定数据的二进制形式第一位为符号位。0为正,1为负。则十进制3的原码为:0000000000000000 00000000 00000011,十进制-3的原码为: 1000000000000000 00000000 00000011 。
反码是原码符号位不变,其它位按位取反。即十进制3的反码为: 01111111 1111111111111111 111111100 ;十进制-3的反码为:1111111111111111 11111111 11111100。
补码,我们规定正数的补码与原码相同,负数的补码是反码加1。即十进制3的补码为:00000000 00000000 00000000 00000011 ;十进制-3的补码为:11111111 11111111 11111111 11111101。
2.二进制的数据已经可以运算,为什么还要用补码?
这是为了方便计算。有没有发现,-3的补码与3的原码之和刚好为0。这表明负数的补码是正数原码的相反数。采用补码进行计算,简化了减法运算,把减法转化成了加法运算。
规律:负数补码的补码等于原码。