Abh*_*bhi 15 java algorithm bit-manipulation
我正在寻找一种方法,在32位数字中使用1的数字而不使用其间的循环.任何人都可以帮助我,并为我提供代码或算法.提前致谢.
eri*_*son 44
见Integer.bitCount(int).如果你想看看它是如何工作的,你可以参考源代码; 许多Integer课程中有点笨拙的例程都来自Hacker's Delight.
简短的、经过优化的答案(C 语言):
int pop(unsigned x) {
x = x - ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x + (x >> 4)) & 0x0F0F0F0F;
x = x + (x >> 8);
x = x + (x >> 16);
return x & 0x0000003F;
}
Run Code Online (Sandbox Code Playgroud)
要了解这种魔法为何有效,请参阅小亨利·S·沃伦 (Henry S. Warren, Jr.)撰写的《寻求加速人口计数》第 10 章《美丽的代码》。