版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014110320/article/details/78713871
常见的位操作-bit manipulation
- 列表内容判断一个数是否是2的幂次方:
if(n & n - 1 == 0) return true;
else return false;
- 判断一个十进制的数转化为二进制时包含的1的个数:(因为每次N&(N-1)操作都是将n最末尾的1反转为0,因此反转个数即为1的个数)
public int hammingWeight(int n) {
int sum = 0;
while(n != 0) {
sum ++;
n &= n - 1;
}
return sum;
}
- 将一个32位数字前后颠倒,即reverse:
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
n = (n >> 16) | (n << 16);
n = ((n & 0xff00ff00) >> 8) | ((n & 0x00ff00ff) << 8);
n = ((n & 0xf0f0f0f0) >> 4) | ((n & 0x0f0f0f0f) << 4);
n = ((n & 0xcccccccc) >> 2) | ((n & 0x33333333) << 2);
n = ((n & 0xaaaaaaaa) >> 1) | ((n & 0x55555555) << 1);
return n;
}
};
下边是它翻转的顺序:
abcdefgh -> efghabcd -> ghefcdab -> hgfedcba