思路如下:
1、每次取当前值n的末位,算法为n&1
2、记录每次要移动的位数size,对n&1左移(<<)size个位置
3、移动完一次后,n无符号右移一位
4、关键是对<<,>>,&这些二进制符号的理解
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int res=0;
for(int size=31;n!=0;n=n>>>1,size--){
//累加
res+=(n&1)<<size;
}
return res;
}
}
原题地址:
190. 颠倒二进制位