题目
代码
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位。