gpt4 book ai didi

java - 32 位整数的二进制表示

转载 作者:行者123 更新时间:2023-11-30 03:30:05 27 4
gpt4 key购买 nike

我编写了一个非常简单的算法来生成 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();
}

这段代码运行良好。下图展示了调用main方法的结果。

Binary representation of 32 bits numbers

但是,当我将 long checker = (number >> i) & 1 更改为 (number & intPower(2,i)) 时,我遇到了问题,它只是给了我异常的结果,我真的不明白为什么。非常欢迎任何有关此问题的帮助。

最佳答案

假设 number 是 2。在二进制中它是 0010,您正在与 intPower(2, 1) 进行比较。您正在执行的是 2 & 2 (0010 & 0010),结果又是 2 (0010) .您的 if 将会失败,因为它与 1 进行比较。简而言之,您在 & 之后得到的是 0rhs 值(并不总是 1/0 就像 (number >> i) & 1)。

将代码更改为:

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

关于java - 32 位整数的二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29255934/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com