反转位数

dat*_*ili 16 java

例如,我有二进制数1011,它等于十进制11.我希望反向位的位置使它变为1101,即十进制13.这是代码:

import java.util.*;
public class bits {
    public static void main(String[] args) {
        Scanner scnr=new Scanner(System.in);
        System.out.println("enter x:");
        int x=scnr.nextInt();
        int b=0;
        while (x!=0){
            b|=( x &1);
            x>>=1;
            b<<=1;
        }
        System.out.println(b);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我输入x 11然后它打印出来26.这是什么错误?

Tho*_*mas 26

你转移的b时间太多了.首先进行轮班(这是第一次,何时b == 0,它没有效果):

while (x!=0){
  b<<=1;
  b|=( x &1);
  x>>=1;
}
Run Code Online (Sandbox Code Playgroud)


Tan*_*ir1 14

稍微偏离主题.还有Java的内置位反转功能选项.

http://java.sun.com/javase/6/docs/api/java/lang/Integer.html#reverse(int)

编辑:这假设您使用的是Java 1.5或更高版本.