我编写了一个非常简单的算法来生成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方法结果的调用。
但是当我将long checker = (number >> i) & 1
更改为(number & intPower(2,i))
时,我遇到了一个问题,它只是给了我异常的结果,我真的无法弄清楚原因。对此非常欢迎。
答案 0 :(得分:2)
想象一下number
是2.在二进制文件中0010
并且您正在与intPower(2, 1)
进行比较。你正在做的是2 & 2
(0010 & 0010
),结果又是2
(0010
)。你的if会因为与1
比较而失败。简而言之,&
之后的0
或 rhs 值(与1
类似,并不总是0
/ (number >> i) & 1
)。
将您的代码更改为:
if (checker != 0) {
resultBuilder.append("1");
} else {
resultBuilder.append("0");
}