思路:本题主要还是考察二进制的操作,我们来向,所谓的颠倒二进制位,相当于反转一个字符串,高位的bit数和低位的bit数做交换,而且题目描述了,最高位和最低位的距离位32位,我们就可以取出数中的每一位(右移),再将该位移动到正确的位置即可(左移)
- 注 (n>>i)&1 的意思是取出第i位下的bit数字(可以推导一下)
- ans|(temp<<(31-i)) 其中的或运算相当于二进制的加法,将每次反转后的数累加起来
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int ans=0;
for(int i=0;i<32;i++){
int temp=((n>>i)&1);
ans=ans|(temp<<(31-i));
}
return ans;
}
}