题目
颠倒给定的 32 位无符号整数的二进制位。
思路
取当前 n 的最后一位:n & 1
将最后一位移动到对应位置,第一次为 31 位,第二次是 30 位,即:31、30、29… 1、0,写作代码 bit << 31;
退出条件,二进制反转时,如果剩余位数全位 0,则可以不用再反转。
<< 左移 右侧空补位0
/>> 右移 左侧空位补最高位,即符号位
/>>> 无符号右移 左侧空位补0
代码
public int reverseBits(int n) {
int ans = 0;
for(int bitSize = 31;n!=0;n = n >>>1,bitSize--){
ans+=(n&1)<<bitSize;
}
return ans;
}