我在破解编码采访书时遇到了一些例子。在位操作章节中,作者使用以下内容创建了全1二进制表示
int allOnes = ~0;
我只是想知道,为什么我们不能简单地做
int allOnes = -1;
答案 0 :(得分:2)
你可以。让我们试一试,看看
System.out.println(Integer.toBinaryString(-1));
System.out.println(Integer.toBinaryString(~0));
System.out.println(~0);
输出(正如您可能已经猜到的那样)
11111111111111111111111111111111
11111111111111111111111111111111
-1
因为~0
-1
。 JLS-15.15.5. Bitwise Complement Operator ~
说(部分),
在运行时,一元按位补码表达式的值是操作数的提升值的按位补码。在所有情况下,~x等于(-x)-1。