3

是否有用于“计数尾随零”(ctz 命令)的库?
这样做的程序是什么?

我试过了:

#include<iostream>
using namespace std;
int main()
{
    int value = 12;
    cout<<ctz(value);
}
4

2 回答 2

5

C/C++ 标准库不提供该操作。但是,对于大多数此类按位运算,都有特定于编译器的内在函数。

使用 gcc/clang,它是__builtin_ctz. 您不需要任何#include 来使用它,正是因为它是一个内在命令。这里有一个GCC 内在函数列表,这里有一个Clang 内在函数列表

使用 Visual Studio,您需要#include <intrin.h>使用_BitScanReverse,如本答案所示

如果您想让您的代码在编译器之间移植,我们鼓励您提供自己的宏/包装器。

于 2013-06-29T01:17:26.580 回答
1

在 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并将其编译为bsfx86 上的指令。

于 2016-07-24T19:29:09.233 回答