C中是否有内置函数返回32位整数中的第一位等于零?
我知道我可以使用for循环检查所有32位:
value <--- parameter (uint32_t)
for (int i=0; i<32; i++){
uint32_t pos = 1 << i;
if (pos ^ value) return i; // xor
}
return -1;
答案 0 :(得分:1)
不幸的是,没有标准化的C函数可以做到这一点,但许多C编译器都提供了自己的功能。当您使用GCC时,它是_builtin_ctz
函数。当您使用Microsoft Visual C时,它是_BitScanForward
函数。
如果你想编写在多个不同编译器上编译的程序,那么你最终会使用很多#ifdef
语句以不同的方式提供相同的东西。 (我一直希望C委员会已经授权其中一个!)