问题
颠倒给定的 32 位无符号整数的二进制位。
例子
思路
-
不考虑的方法
把数字->二进制字符串,处理后,->数字,不可取,因为Integer.valueOf(s,2);不能识别负数,必须要s的第一位是’-'才能识别负数 -
方法1
把二进制的每一位取出来【(n>>i)&1 i=0~31,因为最开始i=0,为最后一位,最高位右移动31位变成最后一位】放在前面【通过左移,左移31-i位,如果开始时右移31位,则应该方放在最后面,如果开始时右移0位,应该放在最高位,左移31次】,然后通过|位运算,把不同位的的数加起来【100+10=110】
-
方法2
代码
//方法1
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int res=0;
for(int i=0; i<32; i++) {
res |= ((n>>i)&1)<<(31-i);
}
return res;
}
}
//方法2