题目
Reverse bits of a given 32 bits unsigned integer.
For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).
Follow up:
If this function is called many times, how would you optimize it?
Related problem: Reverse Integer
思路
此题比较简单,就是将第i为和(31-i)互换即可实现。在编码是现在中,采用求余移位即可。
但是,在完成这个题目的过程中,报了几个错,原因在于:代码不能这么写
uint32_t reverseBits(uint32_t n) {
int len=32;
int res=0;
for(int i=0;i<len;i++){
res|=(n&0x01);
n>>=1;
res<<=1;
}
return res;
}
如果代码如上所示,这会导致,res多移动了一位(即第0位经过32次的移动到了第32bit位上了,即移出去了,),最多只能移动31位。
修正后的代码如下:
uint32_t reverseBits(uint32_t n) {
int len=32;
int res=(n&0x01);
for(int i=1;i<len;i++){
n>>=1;
res<<=1;
res|=(n&0x01);
}
return res;
}