方法一 :暴力,逐步颠倒
方法二:分治,参考大佬的题解,详细建筑师
//方法一
public int reverseBits(int n) {
//Integer.reverse()
int ret = 0;
for (int i=0;i<32;i++){
ret = (ret<<1)+n&1;
n >>= 1;
}
return ret;
}
//方法二
public int reverseBits(int n) {
int ret = n;
ret = ret >>> 16 | ret << 16;//交换前后16位
ret = (ret & 0xff00ff00) >>> 8 | (ret & 0x00ff00ff) << 8;//交换前后8位
ret = (ret & 0xf0f0f0f0) >>> 4 | (ret & 0x0f0f0f0f) << 4;//交换前后4位
ret = (ret & 0xcccccccc) >>> 2 | (ret & 0x33333333) << 2;//交换前后2位
ret = (ret & 0xaaaaaaaa) >>> 1 | (ret & 0x55555555) << 1;//交换前后1位
return ret;
}