oli*_*bre 7 java binary bit-manipulation bit bitwise-operators
我使用64位整数内的位存储标志.
我想知道是否有一个位设置无论64位整数内的位置(ei我不关心任何特定位的位置).
boolean isOneSingleBitSet (long integer64)
{
return ....;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用Bit Twiddling Hacks(Sean Eron Anderson)计算位数,但我想知道检测单个位是否设置的最有效方法是什么...
我发现了一些其他相关的问题:
以及一些维基百科页面:
注意:我的应用程序是在java中,但我很好奇使用其他语言的优化...
编辑:琉永福指出我的问题在我的第一个链接已经得到了答案:请参见如果一个整数是2的幂确定的位操作黑客(肖恩·安德森玉龙).我没有意识到单个位与2的幂相同.
Nei*_*fey 18
如果您只是想确定是否设置了一个位,那么您实际上是在检查该数字是否为2的幂.为此,您可以执行以下操作:
if ((number & (number-1)) == 0) ...
Run Code Online (Sandbox Code Playgroud)
这也将0作为2的幂,因此如果重要的话,你应该检查不是0的数字.那么:
if (number != 0 && (number & (number-1)) == 0) ...
Run Code Online (Sandbox Code Playgroud)
Joh*_*rak 16
(使用x作为参数)
检测是否设置了至少一位很容易:
return x!=0;
Run Code Online (Sandbox Code Playgroud)
同样检测是否设置了第一位(第二低位)很容易:
return (x&2)!=0;
Run Code Online (Sandbox Code Playgroud)
如果它是2的幂,则设置正好一位.这有效:
return x!=0 && (x & (x-1))==0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9461 次 |
| 最近记录: |