【问题标题】:How to convert binary to decimal in java using modulus?如何使用模数在java中将二进制转换为十进制?
【发布时间】:2017-10-09 16:08:07
【问题描述】:

我正在尝试编写一个代码,允许用户使用模数输入二进制数字(限制为 8 位)。到目前为止我有这个:

导入 java.util.Scanner; 公共类主 {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter a Binary Number (8 digit limit)");
    int binaryNum = input.nextInt();
    int m = 0;
    int l;
    for (int n = 0; n <= 7; n++){
        l = (2^n);
        if(binaryNum%(10^(n+1)) == (10^n)){
            m = m + l;
            binaryNum = binaryNum - (10^n);
        }
    }
    System.out.println("Decimal: " + m);
}

}

我尝试输入数字 1001010,但无论何时输入,它都显示为“十进制:2”,这显然是错误的。有人可以帮忙吗?

【问题讨论】:

  • 好的...您正在尝试将二进制转换为十进制并使用模数。什么!!!我相信二进制到十进制是您添加 2^x 的地方,其中 x 是二进制数中第 1 位的位置。模运算是从十进制到二进制/八进制/十六进制等转换的方法。所以 1001010 是 2^6+2^3+2^1 = 64+8+2=74。只是为了澄清位的位置是从 0 开始从右到左计算的。它与十进制数字不同,但不确定是否要将其考虑在内。
  • Java 中的^ 运算符与您可能认为的求幂无关。见What does the ^ operator do in Java?
  • 使用Scanner.nextInt() 将输入作为一串1 和0 的十进制读数是一件很奇怪的事情。为什么不输入String
  • 实际上这更有意义。我完全忘记了 Math.pow();我是个白痴。

标签: java binary decimal java.util.scanner modulus


【解决方案1】:
import java.util.Scanner; 

public class Main {

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    System.out.println("Enter a Binary Number (8 digit limit)");

    int binaryNum = input.nextInt(); // reading binary number

    int m = 0; // to store decimal number

    int l = 0; // to manage power of 2
    int d = 0; // to store intermediate result

    while (binaryNum != 0){ // looping till all digits are over

        d = binaryNum % 10; // taking the last bit of the binary number

        d *= Math.pow(2, l++); // finding 2^l 

        binaryNum /= 10; // dividing the binary number by 10 to shift one bit

        m += d; // add the result to decimal 
    }

    System.out.println("Decimal: " + m); // display result
}
}

我已经编辑了代码,以便将binaryNum 正确转换为十进制。 希望这会有所帮助。!!

【讨论】:

  • 我不知道循环是 0 到 0)
  • 我建议您自己尝试一下。如果发生任何错误,请随时发布。我将编辑代码以处理任意数量的数字。 ** NB : 输入不能超过整数的限制 **
  • 接受答案并关闭问题,如果它对你有用
【解决方案2】:

你可以使用Integer.parseInt 将字符串转换为整数,如果你使用底数为 2:

int decimalValue = Integer.parseInt(c, 2);

你应该能够得到它的二进制值。

例子:

System.out.println(Integer.parseInt("1001010", 2));

输出:74

您现在需要实现的只是对用户可以使用的字符串长度的限制,您希望为 8,您可以开始了。

如果你不想使用 parseInt 你也可以这样做:

        int binaryNumber = 10201; //example input binary
         int decimal = 0;
            int p = 0;
            while(true){
              if(binaryNumber == 0){
                break;
              } else {
                  int temp = binaryNumber%10;
                  decimal += temp*Math.pow(2, p);
                  binaryNumber = binaryNumber/10;
                  p++;
               }
            }
        System.out.println(decimal);

在这种情况下,我从int 转换,我想这对你来说没问题,你只需要在Scanner 上接受int 而不是String,或者转换@987654330 @ 到 int,这将满足您的需求,我认为您在实现中滥用了一些操作。

【讨论】:

  • 我猜在你添加代码之前就出现了反对意见。仅仅讲述库方法而不解释原始代码/方法的问题并不能真正帮助提出问题的人。 :)
猜你喜欢
  • 1970-01-01
  • 2015-06-02
  • 2011-07-09
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2014-11-22
相关资源
最近更新 更多