转自:https://blog.csdn.net/qq_30076791/article/details/50571194
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 AND
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1 OR
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 XOR
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
优先级: 位反(~ ) > 算术 > 位左移、位右移 > 关系运算 > 位与 > 位或 > 位异或 > 逻辑运算
异或:
a^b最多等于a+b,最小等于a-b
出现偶数次的数异或值为0
常见用法
1.去掉最后一位
x>>1
2.在最后加一个0
x<<1
3.在最后加一个1
x<<(1+1)
4.把最后一位变成1
x|1
5.把最后一位变成0
x|1-1
6.最后一位取反
x^1
7.把右数第k位变成1
x|(1<<(k-1))
8.把右数第k位变成0
x&~(1<<(k-1))
9.右数第k位取反
x^(1<<(k-1))
10.取末三位
x&7
11.取k位
x&(1<<k-1)
12.取右数第k位
x>>(k-1)&1
13.把末k位变成1
x|(1<<k-1)
14.末k位取反
x^(1<<k-1)
15.把有边连续的1变成0
x&(x+1)
16.把右起第一个0变成1
x|(x+1)
17.把右边连续的0变成1
<