美文网首页Java学习笔记
偶数二进制位反转(Java)

偶数二进制位反转(Java)

作者: dooze | 来源:发表于2016-08-24 00:26 被阅读152次

java中相关的位操作

运算 功能 说明
& 按位与 a&b a b对应位与
| 按位或 a|b a b对应位或
位非 ~a a按位取反
>> 位右移 a>>b a的二进制位向右移动b位,高位补零
<< 位左移 a<<b a的二进制位向左移动b位,低位补零
>>> 无符号位右移 负数的时候,符号位不参与移位,
^ 位异或 a^b a与b按位异或

二进制位反转思路

以下二进制位用8位做演示

a = 0000 0110 ; 十进制: 6

反转二进制位后

a = 0000 0011 ; 十进制: 3

只保留一个数的最低位,其余位变为0:
n = 0000 1101;
n & 1 = 0000 0001;

假设a = 0000 0110,b=0(用来保存结果) </br>
a每次右移一位,然后最低位与b的最低位 进行位或,然后b左移一位, 直到a == 0为止,这样 b中则是a的反转二进制位的。

过程演示

  1. a = 0000 0110
    b = 0000 0000

  2. a = 0000 0011</br>
    b = 0000 0001

  3. a = 0000 0001</br>
    b = 0000 0011

  4. a = 0000 0000 停止,此时b就是a反转后的结果

java实现代码

public int reverseNum(int n){
  int r = 0 ;//反转的结果
  while(n!=0){ // 直到a==0,不然一直进行移位
    //或运算将n的最低位保存到r中,同时r左移一位,
    //保证上次的移位结果向左移动,新的需要保存的移位结果一直在r的最低位中
    r  = (r<<1) | (n & 1);
    n  = n>>1; // n右移一位
  }
  return r;
}

java 实例


public class EvenNumReverse {
    public void reverse(){
        Scanner in = new Scanner(System.in);
        int count = 0;//输入的数的个数
        int[] seq;//保存输入结果

        //需要输入的数的个数不为零情况下,一直输入
        while((count = in.nextInt())!=0){
            seq = new int[count];
            for(int i=0;i<count;i++){
                int n = in.nextInt();
                if(n%2==0)
                    n = reverseNum(n);
                seq[i] = n;
            }
            print(seq);
        }
        in.close();
    }
    //将一个数的二进制位反转
    public int reverseNum(int n){
        int r = 0 ;
        while(n!=0){
            r  = (r<<1) | (n & 1);
            n  = n>>1;
        }
        return r;
    }
    /*
     * 打印数组
     */
    public void print(int[] res){
        if(res!=null)
            for(int i=0;i<res.length;i++){
                System.out.print(res[i]+"\t");
            }
    }

  public static void main(String[] args){
        EvenNumReverse o = new EvenNumReverse();
        o.reverse();
    }
}

  • 输入输出结果

    3</br>
    1 6 5</br>
    1 3 5 </br></br>
    3</br>
    2 4 6</br>
    1 1 3</br>

相关文章

网友评论

    本文标题:偶数二进制位反转(Java)

    本文链接:https://www.haomeiwen.com/subject/lrbnsttx.html