-1
C中是否有内建函数返回32位整数中的第一位等于零?C中的位操作 - 内置函数
我知道我可以使用检查所有32位一个for循环:
value <--- parameter (uint32_t)
for (int i=0; i<32; i++){
uint32_t pos = 1 << i;
if (pos^value) return i; // xor
}
return -1;
C中是否有内建函数返回32位整数中的第一位等于零?C中的位操作 - 内置函数
我知道我可以使用检查所有32位一个for循环:
value <--- parameter (uint32_t)
for (int i=0; i<32; i++){
uint32_t pos = 1 << i;
if (pos^value) return i; // xor
}
return -1;
遗憾的是没有标准的C函数要做到这一点,但许多C编译器提供一个他们自己。当您使用GCC时,它是_builtin_ctz
函数。当您使用Microsoft Visual C时,它是_BitScanForward
函数。
如果你想编写在多个不同的编译器上编译的程序,那么你最终会使用很多#ifdef
语句以不同的方式提供相同的东西。 (我一直希望C委员会已经授权其中一个!)
通过“First”,你是指最左边还是最右边的位? – 2014-10-27 17:47:36
最右。 31b __ << __ 0b – Guilherme 2014-10-27 17:49:22
在gcc中,您可以使用:[__builtin_ctz](http://gcc.gnu.org/onlinedocs/gcc-4.5.4/gcc/Other-Builtins.html) – 2014-10-27 17:51:35