位运算的骚操作

本文最后更新于:2 小时前

符号 名称 解释
& 只要有0=>0
| 只要有1=>1
^ 异或 相同=>0
~ 1变0,0变1
<< 左移 各二进制位全部左移,右补0
>> 右移 各二进制位全部右移,移到右端低位舍弃,高位补0

判断偶数

if ( n & 1 == 0 )//是偶数
else if ( n & 1 == 1 )//是奇数

交换两个数

a = a ^ b;
b = a ^ b;
a = a ^ b;

只出现一次的数字(LeetCode136)

vector<int> nums = { 1, 1, 2, 3, 3, 4, 4 };
for (int i = 1; i < nums.size(); i++) {
    nums[0] ^= nums[i];
}
return nums[0];

一个二进制数中1的个数

int count( uint32_t n ) {
    int cnt(0);
    while ( n ) {
        if ( n & 1 == 1 ) {
            cnt++;
        }
        n >>= 1;
    }
    return cnt;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!