一元 Not 运算符的内部工作 (~)

Internal working of Unary Not Operator (~)

public class bitwise_operator {

    public static void main(String[] args) {

        int var1 = 42;
        int var2 = ~var1;
        System.out.println(var1 + " " + var2); 
   }
}

以上代码产生 42 -43 作为输出。

据我了解,一元非运算符 (~),取反其操作数的所有位。

现在,42在二进制中是00101010.在 using ~ 运算符上,我们得到 的反转值4211010101

如果你转换前面的二进制值,输出应该是别的东西而不是 -43

碰运气用不同的数字观察模式,发现输出比多1个数字提供的初始值前面有一个前导(-)符号,如上例所示。

例如……

if num is 45           // Output is 45 -46
if num is 1001        // Output is 1001 -1002

有人可以解释一元非运算符 (~) 在内部如何工作以输出这样的结果吗?

您正在使用 有符号 整数值,它是 2 的补码。

你的结果是正确的:11010101 实际上是 -43:

-2^7 + 2^6 + 2^4 + 2^2 + 2^0 = -128 + 64 + 16 + 4 + 1 = -128 + 85 = -43

这就是所谓的补码,Java、C、C++ 等中的整数和所有定点数就是这样工作的

-x = ~x + 1

因此,例如 -1 (0xFFFF) 按位取反 (0x0) 加 1 = 0x1