对数的操作(学到新的更新)
- 求一个正整数的位数
int a = log10(i) + 1; // cmath库
- 整数除法上取整
int x = (a - b + 1) / b;
- 逻辑运算
x & -x; // 取出最低位1
x ^ (x & -x) // 干掉最后一位1
- 成对枚举
x, x ^ 1永远能变成对方,如2变3,3边2
- __builtin_系列
__builtin_ctz(x); // 末尾0的个数
__builtin_clz(x); // 前导0的个数
- 枚举子集
int x = 12;
for(int i = x; i; i = (i - 1) & x)
cout << i << endl;