“〜”运算符的作用是什么?

时间:2020-04-09 03:32:06

标签: java bitwise-operators

我发现〜就像一个NOT运算符,因为在二进制中,它将所有1更改为0,将所有0更改为1。因此,我探索了如何处理此代码,并发现了这一点:

int x = 5;
System.out.println(~(x - 1)); // prints -5

但是x二进制中的x是0101,4是0100。在0100上使用NOT运算符将创建1011,即11。

2 个答案:

答案 0 :(得分:1)

int有32位-您忘记了其他28位设置为0,而~将变成1。

最好使用Integer.toBinaryString进行可视化:

jshell> Integer.toBinaryString(~4)
$23 ==> "11111111111111111111111111111011"

为何此值为-5:

让我们检查一下您从〜4 + 4得到的结果:

   11111111111111111111111111111011
 + 00000000000000000000000000000100
 ----------------------------------
   11111111111111111111111111111111

全是!如果您现在加1会怎样?

   11111111111111111111111111111111
 +                                1
 ----------------------------------
   00000000000000000000000000000000

计算溢出,您得到0!

因此:〜4 + 4 + 1 =0。换句话说,〜4 = -4-1 = -5。

答案 1 :(得分:0)

〜是按位运算符。 反转二进制表示的位 负数存储为2的补数。 5-1 = 4的二进制表示形式是0000 0100

现在5 = 0000 0101的二进制表示形式 1的5的补数= 1111 1010(反转位)

2的5的补码= 1111 1011(1补码加1s) 等于〜5

所以4的按位补码是〜5