是否有一個「計數尾隨零」(ctz命令)的庫?
這樣做的程序是什麼?
我必須在C++中使用'ctz'命令的庫嗎?
我想:
#include<iostream>
using namespace std;
int main()
{
int value = 12;
cout<<ctz(value);
}
是否有一個「計數尾隨零」(ctz命令)的庫?
這樣做的程序是什麼?
我必須在C++中使用'ctz'命令的庫嗎?
我想:
#include<iostream>
using namespace std;
int main()
{
int value = 12;
cout<<ctz(value);
}
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。
如果你想讓你的代碼跨編譯器移植,建議你提供自己的宏/包裝器。
在POSIX,您還可以使用ffs
(找到第一套)函數<strings.h>
這是documented as(不<string.h>
!):
int ffs(int i);
的FFS()功能會發現第一位設置(從最低有效位開始),並返回該位的索引。位從1開始編號(最低有效位)。
請注意,此功能是XSI擴展的一部分,你應該設置_XOPEN_SOURCE
功能測試宏包括<strings.h>
之前,所以原型是可見:
#define _XOPEN_SOURCE 700
#include <strings.h>
GCC識別ffs
和它編譯成一個bsf
x86上的指令。