目录

位运算骚操作

目录

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