leetcode190 颠倒二进制位

题意就是将一个二进制数颠倒之后输出。思路不难,值得学习的是几个位运算符,比如&,|,n&1可用于提取n最低位的值,在n的低位为1时,n|x可用于将x赋给n的最低位。贴代码

class Solution {
public:
    uint32_t reverseBits(uint32_t n) 
    {
        uint32_t result;
        for(int i = 0 ; i < 32; i++)
        {
            result<<=1;
            result|=n&1;
            n>>=1;
        }  
        return result;  
    }
};

 还有一种分治的想法,想要完全颠倒,可以想把当前数据分为两部分,然后交换位置,在对每一个分块递归的完成这个操作。最后就能得到最后的结果。感觉思路和将某一数组向右移多少位的某一种做法是接近的。

 1 class Solution {
 2 public:
 3 const uint32_t M1 = 0x55555555; // 01010101010101010101010101010101
 4     const uint32_t M2 = 0x33333333; // 00110011001100110011001100110011
 5     const uint32_t M4 = 0x0f0f0f0f; // 00001111000011110000111100001111
 6     const uint32_t M8 = 0x00ff00ff; // 00000000111111110000000011111111
 7     uint32_t reverseBits(uint32_t n) 
 8     {
 9         n = (n>>1 & M1)|((n&M1) <<1);
10         n = (n>>2 & M2)|((n&M2) <<2);
11         n = (n>>4 & M4)|((n&M4) <<4); 
12         n = (n>>8 & M8)|((n&M8) <<8);  
13         return n>>16|n<<16;    
14     }
15 };

 

posted @ 2021-03-27 14:33  zhaohhhh  阅读(42)  评论(0)    收藏  举报