先弄清楚原码、反码、补码的概念:
原码 :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。
反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。
补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。
清楚一下几点:
整数在计算机中都是以补码形式进行存储和运算的,显示的时候以原码显示;
正数的原码反码补码都相同,负数的反码等于原码除符号位其余位取反,补码等于反码加一;
非运算
这里主要讨论非运算~0的结果为什么等于-1, ~1的结果为什么等于-2
~1为什么等于-2
~符号是按位取反,0变1,1变0;
清楚以上两点后,我们继续讨论:
1的二进制原码为: 0000 0001
1的二进制补码为: 0000 0001(和原码相同)
运算的时候以补码进行运算,所以:
~1结果为:1111 1110(这是运算结果的补码,可以知道它是一个负数)
转反码(减一): 1111 1101
转原码(符号位不变,其他取反): 1000 0010
可以知道,这就是-2的原码,所以我们打印的时候,得到的结果为-2。