C内置函数中的位操作

C内置函数中的位操作,c,bitmask,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; 不幸的是,没有标准的C函数来实现这一点,但许多C编译器都提供了自己的函数。当你使用GCC时,它是内置的ctz函数。使

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;

不幸的是,没有标准的C函数来实现这一点,但许多C编译器都提供了自己的函数。当你使用GCC时,它是内置的ctz函数。使用Microsoft Visual C时,它是_BitScanForward函数


如果您想编写在多个不同编译器上编译的程序,那么最终将使用许多ifdef语句以不同的方式提供相同的内容。我一直希望C委员会已经授权其中一个

你说的第一位是指最左边还是最右边?最右边。31b\u在gcc中您可以使用:C中没有内置程序。您可以指定编译器/平台吗?您可以使用