位运算的骚操作
本文最后更新于: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 协议 ,转载请注明出处!