C内置函数中的位操作

时间:2014-10-27 17:45:51

标签: c bitmask

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;

1 个答案:

答案 0 :(得分:1)

不幸的是,没有标准化的C函数可以做到这一点,但许多C编译器都提供了自己的功能。当您使用GCC时,它是_builtin_ctz函数。当您使用Microsoft Visual C时,它是_BitScanForward函数。

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