我有一个 uint64_t
,我想找到第一个设置位的索引,将其重置为零并找到下一个设置位。
我怎么知道什么时候终止?全零的 BSF 未定义...
const uint64_t input = source;
if(0 != input){
int32_t setIndex = GCC_BSF_INTRINSIC(input);
while(setIndex != UNDEFINED???){
//Do my logic
//Reset
input[setIndex] = 0;
setIndex = BSF_Variant(input);
}
}
有人可以帮忙吗?
最佳答案
最简单的就是检查输入:
while (input) {
int32_t index = __builtin_ffsll(input);
// do stuff
}
更复杂,根据文档 the docs :
— Built-in Function:
int __builtin_ffs (int x)
Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero.
这让您可以:
for (int index = __builtin_ffsll(input);
index;
index = __builtin_ffsll(input))
{
// do stuff
}
它完成同样的事情,你只需要重复 __builtin_ffsll
调用,所以它更冗长,在我看来无助于清晰。
关于c++ - GCC 位扫描向前查找下一个设置位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32792365/