位运算概览
1 2 3 4 5 6 7
| 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
|
求n的二进制第k位是多少
这里&1判断n是否为奇数
①n为奇数时,对应的二进制数最低位一定为1,&1的结果就是1.
②n为偶数时,相应的最低位为0,n&1的结果就是0.
这里等价于 (n>>k)%2
统计n的二进制中有多少个1
x&-x
(-x)=~x+1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
int lowbit(int x){ return x&-x; } int cnt=0; while(a){ a-=lowbit(a); cnt++; } cout<<cnt;
|