二进制到十进制而不使用java中的math.pow

时间:2017-06-18 12:16:55

标签: java

所以我被要求编写一个将二进制数转换为十进制数的程序。在那种情况下它是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");
    }

3 个答案:

答案 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;
}