所以我被要求编写一个将二进制数转换为十进制数的程序。在那种情况下它是10111.我遇到的问题是我不允许使用math.pow,所以我必须使用嵌套循环。这是我到目前为止所做的。
public static void main(String[] args) {
int x = 10111;
int num = 0, counter = 0;
for (int i = 1; i <= x; i *= 10) {
int binaryDigit = x/i%10;
num += (int) (Math.pow(2, counter) * binaryDigit);
counter++;
}
System.out.println("\""+ x + "\" in binary is equivalent to " + num + " in decimal");
}
答案 0 :(得分:3)
您可以使用位移计算Java中的2的幂。
观察1
是2 0 。另请注意,以二进制表示法在k
右侧添加1
个零会产生k
- 2的幂,原因与以十进制表示法添加零会将数字乘以10相同。
因此,您可以使用以下简单表达式替换对Math.pow
的调用:
num += (1 << counter) * binaryDigit;
注意:将二进制数表示为仅由1和0组成的十进制数有一个不方便的限制:您不能代表1023以上的数字,因为您用完了十进制数字。更方便的表示是String
。
答案 1 :(得分:1)
当您遍历循环中的二进制数字时,可以将当前数字位置的值加倍。 这样,您就可以在每个步骤中获得所需的功率值。 1,2,4,8,16,...
public static void main(String[] args) {
int x = 10111;
int num = 0;
int digitval = 1;
for (int i = 1; i <= x; i *= 10) {
int binaryDigit = x/i%10;
num += digitval * binaryDigit;
digitval *= 2;
}
System.out.println("\""+ x + "\" in binary is equivalent to " + num + " in decimal");
}
答案 2 :(得分:0)
也许这样的事情可以解决问题
int binaryNumber = x;
int power = 0;
int result = 0;
while (binaryNumber / 10 > 0) {
//lets start the loop and parse the length of the binary number
int digit = binaryNumber % 10;
result += digit << power;
power++;
binaryNumber = binaryNumber/10;
}