是否有用于“计数尾随零”(ctz 命令)的库?
这样做的程序是什么?
我试过了:
#include<iostream>
using namespace std;
int main()
{
int value = 12;
cout<<ctz(value);
}
是否有用于“计数尾随零”(ctz 命令)的库?
这样做的程序是什么?
我试过了:
#include<iostream>
using namespace std;
int main()
{
int value = 12;
cout<<ctz(value);
}
C/C++ 标准库不提供该操作。但是,对于大多数此类按位运算,都有特定于编译器的内在函数。
使用 gcc/clang,它是__builtin_ctz
. 您不需要任何#include 来使用它,正是因为它是一个内在命令。这里有一个GCC 内在函数列表,这里有一个Clang 内在函数列表。
使用 Visual Studio,您需要#include <intrin.h>
使用_BitScanReverse
,如本答案所示。
如果您想让您的代码在编译器之间移植,我们鼓励您提供自己的宏/包装器。
在 POSIX 上,您还可以使用(not !) 中的ffs
(find first set) 函数,该函数记录为:<strings.h>
<string.h>
int ffs(int i);
ffs()函数应在i中找到第一个位集(从最低有效位开始),并返回该位的索引。位从一位(最低有效位)开始编号。
请注意,此函数是 XSI 扩展的一部分,您应该_XOPEN_SOURCE
在包含之前设置功能测试宏,<strings.h>
以便原型可见:
#define _XOPEN_SOURCE 700
#include <strings.h>
gcc 识别ffs
并将其编译为bsf
x86 上的指令。