& 与 两个位都为1时,结果为1
| 或 两个位都为0时,结果为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
左移 << 各二进位全部左移若干位,高位丢弃,低位补0
右移 >>各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
1.找到一个数x的2进制表示的第k位是几,最低位为第0位
右移运算符:>>,将x的二进制表示数右移,>>k就是右移了k位
那么求一个数的2进制表示的第k位是几就先将他右移k位再&1
x>>k&1
2.lowbit运算
作用:返回从左往右数最后一位1,(最右边一位)如10100,变为100,1010110变为10(返回的是十进制数)
可以用来计算一个数x中1的个数,先con=0;然后当x不为0时循环,x=x-lowbit(x),意思是x减去了他最右边一位二进制1所代表的十进制数
int lowbit(int x){
return x&(-x);
}