我正在尝试一种有效的算法,该算法可以返回一个位掩码,该位掩码给出从输入算起的第一位为“ 1”的位置。
例如: 000 1 0101应该为000 1 0000和 1 1111111应该给 1 0000000
我想,最明显的方法是做一个循环,检查第一位并按位移位直到字符串结尾,但是我想尽可能避免循环。
任何认为自己对此有很好解决方案的人,随时可以发贴!
答案 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
。