位运算的使用
位运算包括
与 & 与运算常常用于二进制下的取位操作
或 |
非 ~
异或 ^
与0异或不变,与1异或取反,一个数两次异或不变
左移 <<
右移 >>
运用
1、判断int型变量a是奇数还是偶数
a&1 = 0 偶数
a&1 = 1 奇数
据二进制常识,尾数为1则为奇数,反之为偶数
2、整数的平均值
(x+y)>>1
3、获得第i位数字
(a>>i)&1
或
a&(1<<i)
很好理解,我们知道可以用&1来提取最后一位的数,那么我们现在要提取第i位数,就直接把第i位数变成最后一位即可(直接右移)。或者,我们可以直接&上1左移i位,也能达到我们的目的。
4、设置第i位为1
a=a|(1<<i)
5、设置第i位为0
a=a&(~(1<<i))
我们知道非~运算是按位取反,(1<<i)非一下就变成了第i为是0,其它全是1的二进制串。这样再一与原数进行&运算,原数的第i位无论是什么都会变成0,而其他位不会改变
6、把第i位取反
a=a^(1<<i)
1左移i位之后再进行异或,我们就会发现,如果原数第i位是0,一异或就变成1,否则变成0。