Loading

190. 颠倒二进制位

题目

 

代码

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;
        // for 8 bit binary number abcdefgh, the process is as follow:
        // abcdefgh -> efghabcd -> ghefcdab -> hgfedcba
    }
};

 

思路

步骤:

1、将n的左边16位和右边16位进行交换。

2、将n的左边16位中的左边8位和右边8位交换,右边16位同理。

3、将......左边8位中的左边4位和右边4位交换....

 

所以可以基本明白这种交换的方式就是每次先交换一半,然后再交换这两个一半中的一半,直到交换到1位。

posted @ 2018-09-17 18:43  李正浩  阅读(103)  评论(0编辑  收藏  举报