题目分析:将一个二进制的数颠倒过来,比如10010,输出01001。在写c++代码时,我把这个看作是十进制颠倒的原理,比如110,十进制情况下,每次%出最后一位然后相加。二进制,就只需要将% /的底数换成2就行。在python中,写同样的代码会有问题,python3中int位数不是固定32位,其实可以用fixedint模块,但是leetcode没有,所以就用同样的思想,一位位的取出来。
C++:
uint32_t reverseBits(uint32_t n) {
uint32_t count = 0;
int i;
for(i = 0 ; i < 32 ; i++){
count = count*2 + n%2;
n /= 2;
}
return count;
}
python:
def reverseBits(self, n: int) -> int:
count = 0
for i in range(32):
count <<= 1 #左移一位
count += n & 1 #保留n最后一位加上去
n >>= 1 #n右移一位
return count