题目:
第一种解法: 先把n的二进制位每一位放进数组a中,然后翻转乘以对应的2的次方然后相加
uint32_t reverseBits(uint32_t n) {
int i = 0,a[35],goal=0;
long long flag = 1;
for(i=0;i<32;i++){
if(n){
a[i] = n%2;
n/=2;
}
else {
a[i] = 0;
}
}
while(i--)
{
flag *= 2;
goal += a[i] * flag/2;
}
return goal;
}
第二种解法:用位运算,把n的最后一位挪到res的第一位,然后n向右移,res向左移,一直循环32次,res就是我们要求的。
uint32_t reverseBits(uint32_t n) {
int i = 32;
uint32_t res = 0;
while(i--)
{
res=res<<1;
res += n&1;
n=n>>1;
}
return res;
}