Java 通过0位操作清除i中的位

Java 通过0位操作清除i中的位,java,bit-manipulation,bit,Java,Bit Manipulation,Bit,我打算破解编码面试第5章位操作 并找到了清除数字num中从i到0的位的方法 int mask = ~(-1 >>> (31 - i)); return num & mask 尽管上述方法有效 我们能像这样简单吗 int mask = (-1 << (i+1)); return num & mask; intmask=(-1绝对。你的mask-1>(31-i))+“”+(-1确实存在一个边缘情况:对于i=31,(-1>(31-i))=0 这是因为移

我打算破解编码面试第5章位操作 并找到了清除数字num中从i到0的位的方法

int mask = ~(-1 >>> (31 - i));
return num & mask
尽管上述方法有效

我们能像这样简单吗

int mask = (-1 << (i+1));
return num & mask;

intmask=(-1绝对。你的mask
-1>(31-i))+“”+(-1确实存在一个边缘情况:对于
i=31
(-1>(31-i))=0

这是因为移位计数是按类型的大小(以位为单位)取模的,在本例中为32,
(31+1)mod 32=0
,因此在两个表达式中,有效移位计数均为零。然后,由于第二个表达式的反向逻辑,它们的作用不同

然而,
~(-1>>(31-i))
相当于更简单的
-2
for (int i = 0; i < 31; i++) {
    System.out.println(~(-1 >>> (31 - i)) + " " + (-1 << (i+1)));
}