我试图找到一个最佳代码来定位长整数(64 位)中的单个位索引。长整数只有一位设置位。 (使用C语言)
目前,我只是将整个事情移动一位,然后检查零。我读过有关查找表的内容,但它不适用于整个 64 位。我考虑过检查每个 8 位是否为零(如果不使用查找),但我仍然必须一次移位 8。 (移位 8 次比移位 1 次 8 次更好?)
(注意:我正在为移动设备开发,它们[毫不奇怪]很慢)。
每当我需要某种方法来操作位时,我总是寻找位摆弄黑客 http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightParallel。它也没有什么解决方案可以解决您的问题。
这个解决方案似乎是快速且最先进的:
并行计算右侧连续的零位(尾随)
unsigned int v; // 32-bit word input to count zero bits on right
unsigned int c = 32; // c will be the number of zero bits on the right
v &= -signed(v);
if (v) c--;
if (v & 0x0000FFFF) c -= 16;
if (v & 0x00FF00FF) c -= 8;
if (v & 0x0F0F0F0F) c -= 4;
if (v & 0x33333333) c -= 2;
if (v & 0x55555555) c -= 1;
对于 N 位字,操作次数最多为 3 * lg(N) + 4。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)