位运算骚操作
目录
XOR
异或: 相同为0,不同为1
x^0=x
x^(~x)=全1 #位数和x一样的全1
x^x=0
交换两个整数变量
a^=b
b^=a
a^=b
判断奇偶性
x&1 == 1 #奇数
x&1 == 0 #偶数
计算某个数字二进制位1的个数
int countOne(int num)
{
int cnt = 0;
for (int i = 0; i < 8 * sizeof(num); ++i) {
cnt += num & 1;
num >>= 1;
}
return cnt;
}
判断某一位是否为1
(n>>(pos-1))&1
乘2除2
n>>1 #/2
n<<1 #*2
掩码操作,获取前面几位
mask=11110000
n=10100000
mask&n #获取前面4位 其它位置0
将最低位的1置0
num & (num - 1)
一个数组中其他数都出现了2次,只有一个数出现了1次,找出那个数
int showOnece(vector<int> nums)
{
int res = 0;
for (auto num : nums) {
res ^= num;
}
return res;
}
将指定几个位清除
AND_NOT(a, b) = AND(a, NOT(b))
n&(~0x03) #n的1、2的1位置0