1.__builtin_popcount(unsigned int n):返回x的二进制下1的个数。

2.__builtin_parity(unsigned int n):返回x二进制下1的个数的奇偶性(偶数个输出0,奇数个输出1)。

3.__builtin_ffs(unsigned int n):返回x的最后一位1的是从后向前第几位 (从1开始)。

int n = 1;//1
int m = 8;//1000
cout<<__builtin_ffs(n)<<endl;//输出1
cout<<__builtin_ffs(m)<<endl;//输出4

4.__builtin_clz (unsigned int x):返回x二进制下最高有效位到最高位的1上一位的长度(即最高位开始连续0的个数)。

5.__builtin_ctz(unsigned int n):返回x的二进制下最低位开始连续0的个数(即__builtin_ffs(x)-1)。

以上的返回类型都是unsigned int,只要在函数名后面加上ll,即可返回unsigned longlong,e.g.:__builtinbuiltin_popcountll(x)。

其他:用如下指令可以将__builtin_popcount被编译器识别为一条指令,加快运行速度。

#pragma GCC target ("popcnt")

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

bzoj2002 分块 & HDU6394 Previous
HDU5527 逆向思维+贪心+dfs Next