位运算内置函数以及常用用法

位运算内置函数以及常用用法

__builtin_族(默认参数是unsigned int,如果要传入unsigned long long 类型在后面添加\(ll\),例如__builtin_clzll(x))

函数名称 用法 结果(以10为例)
__builtin_clz(x) 计算x的前导0个数 28
__builtin_ctz(x) 计算x的后缀0个数 1
__builtin_popcount(x) 计算x中有多少个1 2
__builtin_ffs(x) 计算x的最低位的1的位置 2
__builtin_parity(x) 计算x中1的奇偶性,偶数个返回0,奇数个返回1 0

特别注意:clz和ctz对于0返回的结果是未定义,所以在计算时一定要特判

因为ffs等价于ctz+1,parity也可以用popcount&1算,所以最重要的是前面三个函数

活用(int类型下):

  • 计算x的二进制长度bitlen:32-__builtin_clz(x)
  • 计算最高位的1的位置:32-__builtin_clz(x)1-based
  • lowbit(x):x&-x等价于(1<<(__builtin_ctz(x)))
  • highit(x)等价于1<<(32-__builtin_clz(x)-1)
  • 计算log2(x):32-__builtin_clz(x)-1

一定要记得clz和ctz对0的特判!

PS:有的人喜欢用31-***代替32-***-1,不过个人觉得后者容错率高一些

posted @ 2026-07-18 17:41  江蝶  阅读(15)  评论(0)    收藏  举报