& 按位与(两个都是1)
常用 x&1 来取最后一位,如:
13 & 1 = 1101 & 0001 = 0001 = 1
12 & 1 = 1100 & 0001 = 0000 = 0
事实上如果 x 是奇数则 x & 1得到1,偶数得0.
| 按位或(有一个是1就行)
把某一位强制设成1,而且不影响其他位。
<< 左移
整体左挪一位,右边补0.
相当于*2
>>右移
对于无符号数,整体右移一位,左边补零。
for 正数和无符号数,右移k位相当于除以 2^k 取整。
^ 按位异或(两个不同则为1,相同则为0)
常用来翻转某一位。
例题:颠倒二进制位
class Solution {
public:
int reverseBits(int n) {
int ans = 0;
for(int i = 0;i < 32;i++){
ans <<= 1;
int t = n&1;
ans |= t;
n >>= 1;
}
return ans;
}
};