2014-10-27 84 views
-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; 
+0

通过“First”,你是指最左边还是最右边的位? – 2014-10-27 17:47:36

+0

最右。 31b __ << __ 0b – Guilherme 2014-10-27 17:49:22

+0

在gcc中,您可以使用:[__builtin_ctz](http://gcc.gnu.org/onlinedocs/gcc-4.5.4/gcc/Other-Builtins.html) – 2014-10-27 17:51:35

回答

1

遗憾的是没有标准的C函数要做到这一点,但许多C编译器提供一个他们自己。当您使用GCC时,它是_builtin_ctz函数。当您使用Microsoft Visual C时,它是_BitScanForward函数。

如果你想编写在多个不同的编译器上编译的程序,那么你最终会使用很多#ifdef语句以不同的方式提供相同的东西。 (我一直希望C委员会已经授权其中一个!)