sig*_*sen 8 java binary int bit-manipulation
如果你有二进制数10110我怎么能让它返回11111?例如,在第一个1之后将所有位设置为1的新二进制数,下面列出了一些类似的例子:
101应返回111(3位长度)011应返回11(2位长度)11100应返回11111(5位长度)101010101应返回111111111(9位长度)
如何在Java中获得最简单的方法?我可以想出一些方法,但它们不是很"漂亮".
没有测试过,但这样的事情应该没问题:
long setBits(long number) {
long n = 1;
while (n <= number) n <<= 1;
return n - 1;
}
Run Code Online (Sandbox Code Playgroud)
你可以使用这段代码:
int setBits (int value)
{
value |= (value >> 1);
value |= (value >> 2);
value |= (value >> 4);
value |= (value >> 8);
value |= (value >> 16);
return value;
}
Run Code Online (Sandbox Code Playgroud)
这个想法是最左边的1将被复制到右边的所有位置.
编辑:也适用于负面value.如果替换int为long,请添加一个额外的|=声明:value |= (value >> 32).通常,最后一次移位必须是2的幂,其至少value是位大小的一半.