int a = 6;
~a = ?
Java中运算都是以补码进行计算的,6的原码为 00000000 00000000 00000000 00000110,正数的补码 = 反码 = 原码
所以补码也是 00000000 00000000 00000000 00000110,然后进行取反操作变成了 11111111 11111111 11111111 11111001,
计算机是以补码进行计算的,我们最终看到的是原码。
所以将得到的数值变成原码,首先因为取反后符号位变成了1,补码等于反码+1,所以反码为 11111111 11111111 11111111 11111000,原码为 10000000 00000000 00000000 00000111
所以~a = -7
int a = -8
~a = ?
-8的原码为 10000000 00000000 00000000 00001000,反码为 11111111 11111111 11111111 11110111,补码为
11111111 11111111 11111111 11111000,然后对补码进行取反为 00000000 00000000 00000000 00000111,因为取反之后的数值变成了正数,原码 = 补码
所以 ~a = 7
结论 ~n = -(n + 1)