Kea*_*uan 3 c++ algorithm bit-manipulation bitwise-operators
我想以二进制格式获取等于 1 的索引,现在我使用如下代码:
inline static uint8_t the_index(uint32_t val){
return uint8_t(log(val & ((~val) + 1))/log(2));
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否还有其他方法可以达到相同的目标?有没有可能用位运算来解决这个问题呢?
我这样做是为了迭代一个值并构建一些取决于迭代位置的操作,伪代码如下所示:
while (temp) {
auto cur_index = the_index(temp);
auto window = ((1 << i) - 1) << cur_index;
if (((temp & window) ^ window) == 0) {
//....do something
}
temp &= temp - 1;
}
Run Code Online (Sandbox Code Playgroud)
为此有一个标准函数:
auto cur_index = std::countr_zero(temp);
Run Code Online (Sandbox Code Playgroud)
在我的系统上,这编译为:
xor eax, eax
tzcnt eax, edi
Run Code Online (Sandbox Code Playgroud)
请注意,无论输入是否恰好有一个设置位,此函数都会成功计算从右到第一个位的零位。
| 归档时间: |
|
| 查看次数: |
2487 次 |
| 最近记录: |