位运算
位运算
按位与
两数相同位都为1则为1,否则为0
a&b ----------> 二进制
如3&4 -----------> 0010&0011 -------->0010--------->3
用途
- 清零
- 与0按位与
- 取一个数的指定位
- 比如取10101110的低四位,只需要找到低四位都为1,其余为0的数按位与
- 判断奇偶
- 根据末位0还是1判断,1为奇数,0为偶数可以使用a&1判断
按位或
a|b
两者相同位中有一个为1,则为1,否则为0
用途
- 将一个数据的某些位设置为1,比如要将10101110低四位设置为1,则找到一个数低四位都为1,其余为0的00001111
按位异或
值相同为0,值不同为1
a^b
用途:
-
翻转指定位
比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=00001111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到
-
与0相异或值不变
例如:1010 1110 ^ 0000 0000 = 1010 1110
-
交换两个数
举例
void Swap(int &a, int &b){
if (a != b)
{
a ^= b;
b ^= a;
a ^= b;
}
}
按位取反
该数中 0的位置变为 1;1 的位置变为 0
~a
取反运算的用途:
- 使一个数的最低位为零使a的最低位为0,可以表示为:a & 1。1的值为 1111 1111 1111 1110,再按”与”运算,最低位一定为0。因为” ~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。
按位左移
将该数 a左移 b 位,正数左移后为正数,负数左移后为负数
a<<b
按位右移
将该数 a 右移 b位,正数右移后为正数,负数右移后为负数。不论正负,都下取整
a>>b
非
该数是 0则为 1 ;否则为 0
!a

浙公网安备 33010602011771号