(引自某位大佬的洛谷博客)
__builtin_ffs(x)
返回x
的二进制下第一位1
的位置(从1
开始)__builtin_clz(x)
返回x
二进制下最高有效位到最高位的1
上一位的长度(即最高位开始连续0
的个数)__builtin_ctz(x)
与上一个函数相反,返回x
的二进制下最低位开始连续0
的个数(即第一个函数 - 1)__builtin_parity(x)
返回x
二进制下1
的个数的奇偶性__builtin_popcount(x)
返回x
二进制下1
的个数
以上函数的唯一参数都为unsigned int
类型,并且都有unsigned long long
版本,即在函数名后面加上ll
,比如 __builtin_popcountll(x)
。
对于其他的__builtin_
系列函数,可以自行查阅GNU C
所提供的文档。
另外如果在程序开头加上这么一句话
#pragma GCC target ("popcnt")
可以加快运算速度。