190. Reverse Bits
仅供自己学习
思路:
通过每次n和1相与获得最低位,然后将其左移到31-i位,在将n右移一位更新最低为,这样就能翻转过来了。
代码:
1 class Solution { 2 public: 3 uint32_t reverseBits(uint32_t n) { 4 uint32_t rev=0; 5 for(int i=0;i<32;++i){ 6 rev |= (n&1)<<(31-i); //n&1获得n当前最低位,然后把这个最低位左移到31-i的位置,rev与这个相或就能在rev添加这个新位的元素了 7 n=n>>1; 8 } 9 return rev; 10 } 11 };
另一种方法分治。如下解释:



代码:
1 class Solution { 2 private: 3 const uint32_t M1 = 0x55555555; //取一个位,取奇数 4 const uint32_t M2 = 0x33333333; //每次取两个位 5 const uint32_t M3 = 0x0f0f0f0f; //每次取四个位 6 const uint32_t M4 = 0x00ff00ff; //每次取八个位 7 public: 8 uint32_t reverseBits(uint32_t n) { 9 n = (n&(M1<<1))>>1 | (n&M1)<<1; //n&(M1<<1) 获取偶数位,(n&M1)获奇数位 10 n = (n&(M2<<2))>>2 | (n&M2)<<2;//每次取两个位 11 n = (n&(M3<<4))>>4 | (n&M3)<<4; 12 n = (n&(M4<<8))>>8 | (n&M4)<<8; 13 return n<<16|n>>16; 14 } 15 };

浙公网安备 33010602011771号