在说这个问题之前,我们需要知道这几个概念:原码、反码、补码
- 在计算机运算的时候,都是以补码的形式运算的
- 正数的原码、反码、补码都一样
- 负数的反码=它的原码符号位不变,其余位取反
- 负数的补码=负数的反码+1
- 0的反码、补码都是0
- 二进制的最高位为符号位,0表示正数,1表示负数
在计算机中,2的二进制为00000010,它的反码、补码都是00000010,如果要对2按位取反,就要对它的补码按位取反。
00000010按位取反结果为11111101
对补码取反的结果仍是补码,只不过它会变成另外一个数的补码,这个数(用a表示)就是我们的计算结果,11111101的最高位是1,说明它是某一个负数的补码,由于负数的补码等于它的反码+1,所以a的反码为11111100,a的原码为10000011,即为-3
~2
-3
我们再举个例子
~-8
7
-8的原码为10001000
-8的反码为11110111
-8的补码为11111000
对11111000取反,结果为00000111,最高位是0,说面它是某个正数(b)的补码,由于正数的原码、反码、补码一样,所以b=00000111,即为7