在c ++中我必须使用什么库来进行'ctz'命令?

时间:2013-06-29 01:14:42

标签: c++

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

我试过了:

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

2 个答案:

答案 0 :(得分:5)

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

使用gcc / clang,它是__builtin_ctz。你不需要任何#include来使用它,正是因为它是一个固有的命令。这里有一个list of GCC intrinsics here和一个list of Clang intrinsics

使用Visual Studio,您需要#include <intrin.h>,并使用_BitScanReverse作为shown in this answer

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

答案 1 :(得分:1)

在POSIX上,您还可以使用来自ffs<strings.h>!)的<string.h>(查找第一集)功能documented as

int ffs(int i);
     

ffs()函数应在 i 中找到第一个位集(从最低有效位开始),并返回该位的索引。位从1开始编号(最低位)。

请注意,此函数是XSI扩展的一部分,您应该在包含_XOPEN_SOURCE之前设置<strings.h>功能测试宏,以便原型可见:

#define _XOPEN_SOURCE 700
#include <strings.h>

gcc识别ffs并将其编译为x86上的bsf指令。