Java中的非位运算
非运算
这里主要讨论非运算~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。