高效位运算:__builtin_系列函数

一系列很好用的函数?时间复杂度大概是 \(O(1)\)

  • 返回x的最后一位1的是从后向前第几位,比如114514(11011111101010010)返回 2。
int __builtin_ffs (unsigned int x)

  • 返回前导的 0 的个数。
int __builtin_clz (unsigned int x)

  • 返回后面的 0 个个数,和 __builtin_clz相对,比如1919810(111010100101101000010)返回 1。
int __builtin_ctz (unsigned int x)

  • 返回二进制表示中1的个数,比如1919810(111010100101101000010)返回 10。
int __builtin_popcount (unsigned int x)

  • 返回x的奇偶校验位,也就是x的1的个数模2的结果,比如1919810(111010100101101000010)返回 0。
int __builtin_parity (unsigned int x)

这些函数都有相应的 usigned longusigned long long 版本,只需要在函数名后面加上 lll 就可以了,比如 int __builtin_clzll

鸣谢:高效位运算 __builtin_系列函数——Yuer-

原文地址:https://www.cnblogs.com/Silymtics/p/14426336.html