常见的位操作bit manipulation

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/u014110320/article/details/78713871