一元非运算符的内部工作(〜)

时间:2015-04-16 13:30:23

标签: java operators

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 。在使用 运算符时,我们得到 反转值42 11010101

如果您转换前面的二进制值,则输出应该是其他内容,而不是 -43

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

例如..,

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

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

2 个答案:

答案 0 :(得分:3)

您正在使用带符号的整数值,该值为2的补码。

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

-2 ^ 7 + 2 ^ 6 + 2 ^ 4 + 2 ^ 2 + 2 ^ 0 = -128 + 64 + 16 + 4 + 1 = -128 + 85 = -43 < / p>

答案 1 :(得分:0)

这就是所谓的两个补码,它是Java,C,C ++等中的整数和所有定点数的工作原理

-x = ~x + 1

所以例如-1(0xFFFF)否定按位(0x0)加1 = 0x1