(n >> k)& 1 取出整数n在二进制表示下的第k位
n & ((1 << k)-1) 取出整数n在后k位二进制所代表的值
int main() { int n = 31; cout<<(n & ((1 << 3) - 1))<<endl; return 0; //输出7 二进制表示 1 1 1 1 1取出后三位 0 0 1 1 1 == 7** } int main() { int n = 31; cout<<(n & ((1 << 4) - 1))<<endl; return 0; //输出7 二进制表示 1 1 1 1 1取出后三位 0 1 1 1 1 == 15 }
n ^ (1 << k)将二进制的第k位取反
int main() { int n = 31; cout<<(n^(1<<3))<<endl; return 0; //输出的是23 二进制表示:1 0 1 1 1 } int main() { int n = 31; cout<<(n^(1<<4))<<endl; return 0; //输出的是15 二进制表示 0 1 1 1 1 }
n | (1 << k) 将n二进制的第k位赋值为1
n & (~(1 << k)) 将n二进制的第k位赋值为0
成对变换
int main() { //如果n为偶数 n ^= 1 == n+1; //如果n为奇数 n ^= 1 == n; return 0; }
lowbit运算
int main() { cout<<(n & (~n))<<endl;//取出最低位的1 for(int i = 31 ;i >= 0;i --)//取出最高位的1 { if((n >> i) & 1) { cout<<i+1<<endl; break; } } }