是否有'计数尾随零'(ctz命令)的库?
这样做的程序是什么?
我试过了:
#include<iostream>
using namespace std;
int main()
{
int value = 12;
cout<<ctz(value);
}
答案 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
指令。