今天在之前 ReverseInt的基础上,看了这个ReverseBit问题,有点类似,但是又不一样。
这个两个问题呢,其实都是要对每一位进行处理,ReverseInt是要处理个十百位,而Bit问题是要处理每一个bit位。前者我们之前做过,主要是用 / 和 % 这两个操作来做。
而今天这个 Bit 问题主要是用 bit运算来做的,即 & | ! 三者。注意,这里还有 << 和 >> 左移位和右移位操作。
最终代码有两个版本,这里上标准版本吧:
问题的关键还是在于如何取某一个bit位
详情见代码
package day_49;
// 思路基本一样,不过我们需要按照 对位的处理 来写代码
public class ReverseBits2 {
public int reverseBits(int n){
int res = 0;
for(int i=0;i<32;i++){
int now_digit = n&1; // 最后一位
n = n>>1;
res = (res<<1)|now_digit;
}
return res;
}
public static void main(String args[]){
ReverseBits2 r2 = new ReverseBits2();
System.out.println(r2.reverseBits(16));
}
}