Java 32位整数的二进制表示

Java 32位整数的二进制表示,java,Java,我编写了一个非常简单的算法,用于生成32位整数的二进制表示 这是我的密码: public class NumberManipulator { public static final int HEAVIEST_BIT = 32; public static long intPower(int value, int power) { if (0== power) { return 1; } long result = 1; for (int i

我编写了一个非常简单的算法,用于生成32位整数的二进制表示

这是我的密码:

public class NumberManipulator {

public static final int HEAVIEST_BIT = 32;


public static long intPower(int value, int power) {
    if (0== power) {
        return 1;
    }

    long result = 1;
    for (int i = 1; i <= power; i++) {
        result = result * value;
    }
    return result;
}


public static void main(String[] args) {

    int n1 = 7;
    int n2 = 18;
    int n3 = 65;
    int n4 = 11;

    System.out.println(getBinaryRepresentationOf(n1));
    System.out.println(getBinaryRepresentationOf(n2));
    System.out.println(getBinaryRepresentationOf(n3));
    System.out.println(getBinaryRepresentationOf(n4));

}

public static String getBinaryRepresentationOf(int number) {
    StringBuilder resultBuilder = new StringBuilder();

    for (int i =  HEAVIEST_BIT-1;  i >= 0; i--) {

        long checker = (number >> i) & 1; // (number & intPower(2,i));    (number >> i) & 1; 
        if (checker == 1 ) {
            resultBuilder.append("1");
        } else {
            resultBuilder.append("0");
        }
    }
    return resultBuilder.toString();
}
public class NumberManipulator{
公共静态最终整数最重\u位=32;
公共静态长intPower(int值,int power){
如果(0==功率){
返回1;
}
长期结果=1;
对于(int i=1;i=0;i--){
长棋盘格=(数字>>i)&1;/(数字&intPower(2,i));(数字>>i)&1;
if(checker==1){
resultBuilder.append(“1”);
}否则{
resultBuilder.append(“0”);
}
}
返回resultBuilder.toString();
}
这段代码运行良好。下图演示了对main方法结果的调用


然而,当我通过
(number&intPower(2,I))更改
long checker=(number>>I)和1时,我面临一个问题
,它只会给我异常的结果,我真的不知道为什么。任何关于这方面的帮助都是非常受欢迎的。

想象一下
数字是2。在二进制中,它是
0010
,你正在与
intPower(2,1)
进行比较。你正在做的是
2和2
0010和0010
),结果又是
2
0010
)。您的if将失败,因为它与
1
进行比较。简而言之,
之后得到的是
0
或rhs值(不总是
1
/
0
(数字>>i)&1

将代码更改为:

if (checker != 0) {
    resultBuilder.append("1");
} else {
    resultBuilder.append("0");
}