1. 程式人生 > >190. 顛倒二進位制位

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位。