Tricks
二进制/位运算相关
内建函数
-
__builtin_ctzll(x)求 左侧连续 的个数 -
__builtin_popcount(x)求 二进制表示中 的个数
Lowbit
-
x&-x求左侧一个 ,如 -
使用 Lowbit 预处理状压中二进制数对应数组元素的和值
1
2
3for(int s=1;s<(1<<n);s++){
sum[s]=sum[s^(s&-s)]+a[__builtin_ctzll(s&-s)+1];
} -
使用 Lowbit 枚举二进制数中每一个
1
2
3for(int t=x;t;t-=t&-t){
//此时用t&-t从左到右取出所有1
}
Tricks
https://shicj.pages.dev/2026/06/25/Tricks/