c - C 中的位操作 - 内置函数

标签 c bitmask

C 中是否有任何内置函数可以返回 32 位整数中第一位等于 0 的值?

我知道我可以使用 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 时,它是 _builtin_ctz 函数。当您使用 Microsoft Visual C 时,它是_BitScanForward 函数。

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

关于c - C 中的位操作 - 内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26593605/

相关文章:

C 程序数组超过 1 个字

c++ - 使用其指针屏蔽寄存器 - AVR 端口

C++11 和 [17.5.2.1.3] 位掩码类型

c - fopen和open有什么关系?

c - 函数声明隐藏全局声明

c++ - 用掩码交错位

c - 当我只有 n^2 时获取第 n 个数组元素的简单方法

c# - 查找整数的集合位

c++ - 如何在图片中查找片段

c - pthread 示例中的查询 regaring 代码序列