颠倒给定的 32 位无符号整数的二进制位。
public class Solution {
public int reverseBits(int n) {
int rev = 0;
for(int i=0;i<32;i++){
rev<<=1; //当rev=0,其实不起作用
rev |= n&1;
n>>>=1;
}
return rev;
}
}
循环实现:
rev左移1位,相当于*2,右边空出来的那位(最低位)等待后续填充
取n的最低位: n&1
将当前n的最低位添加到rev的最低位: rev | (n&1),即添加来的最低位就是n的最低位,rev其他位不受影响(|0不改变)
n逻辑右移1,即丢掉最低位
本题用不用逻辑右移都可以过,因为只取n的最低位,与n的符号位无关