按位-获取字节中第一位的位置

时间:2018-07-25 21:48:04

标签: bit-manipulation bitwise-operators

我正在尝试一种有效的算法,该算法可以返回一个位掩码,该位掩码给出从输入算起的第一位为“ 1”的位置。

例如: 000 1 0101应该为000 1 0000和 1 1111111应该给 1 0000000

我想,最明显的方法是做一个循环,检查第一位并按位移位直到字符串结尾,但是我想尽可能避免循环。

任何认为自己对此有很好解决方案的人,随时可以发贴!

1 个答案:

答案 0 :(得分:1)

您要查找的函数/操作码的名称为:TZCNT: "Count the Number of Trailing Zero Bits"。如果您的CPU支持BMI1指令集扩展名,则该选项可用。 与BTS: "Bit Test and Set"结合使用,您可以通过两个主要的操作码来实现您的目标:

xor   eax, eax                ; Clears EAX and breaks dependencies
tzcnt edx, [memoryOperand]    ; Gets the count of trailing 0's in EDX
bts   eax, edx                ; Sets the bit found by TZCNT in EAX

此示例中的位空间来自0..31