【发布时间】:2012-11-20 15:54:57
【问题描述】:
可能重复:
Efficient bitwise operations for counting bits or find the right|left most ones
有没有快速找到(32 位)二进制数中的第一个 1 的方法?
例如如果我有数字 00000000 00000000 00000000 10000000
我想计算值“7”(或“24”,如果从另一侧读取),因为数字中的第一个零存储在右侧的第 7 位中。
有没有比这个更快的方法
int pos=0;
int number = 127; //binary from above
while ((number>>pos) > 0) { pos++; }
?
也许是特定的 x86 汇编指令?
【问题讨论】:
-
你假设只有一个“1”吗?
-
从左起第一个(从 MS 位开始)或从右起第一个 1(从 LS 位开始)?
-
为什么你认为你需要优化这个?你会调用它数百万次吗?
-
使用此处描述的方法之一:Bit Twiddeling Hacks
-
@SteveWellens 我不了解 OP,但实际上我有代码在运行数小时的科学代码中每隔约 300 个 CPU 周期调用一次
bsr。所以考虑这个是有道理的。