文章目录
1.lowbit 计算一个数二进制下最低位 1 对应的值
int lowbit(int x) {
return x&(-x)
}
判断一个数x二进制下的第i位是否为1
bool isOne(int x) {
int i;
// 想办法取出x的第 i 位
return ( (1<<(i-1)) & x )
}
将一份数字x二进制下第位改为1
解释: 将 1 左移 i-1 位,相当于制造了一个只有第 i 位上是 1,其他位上都是 0 的二进制数,然后与 x 或运算即可
void change(int x) {
int i;
// 想办法取出x的第 i 位
x |= (1 << (i-1))
}
计算一个数字x二进制下含有1或0的个数
int getAns {
int num=0;
while(x) {
x &= (x-1);
num++;
}
return num;
}
判断一个数x是否为 2 的n次方
bool judge(int x) {
return (x & (x-1)) == 0;
}
对 1 ^ (异或)
偶数 : x ^ 1 = x + 1
奇数 : x ^ 1 = x + 1