2013-06-29 131 views

回答

4

C/C++標準庫不提供該操作。但是,對於大多數此類按位操作,具有特定於編譯器的內在函數。

用gcc/clang,它是__builtin_ctz。你不需要任何#include來使用它,這正是因爲它是一個內在的命令。這裏有list of GCC intrinsics herelist of Clang intrinsics

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

如果你想讓你的代碼跨編譯器移植,建議你提供自己的宏/包裝器。

1

在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上的指令。

相關問題