将二进制数转换为十进制数的Java程序。输入是一串零和一串

时间:2015-01-19 19:49:56

标签: java binary decimal converter

我必须创建一个java程序,使用以下步骤将二进制转换为十进制。作为新人,我做了一些事情,但我不知道我做错了什么或如何继续。

public class BinaryToDecimal {
public static void main(String args[]){
    long sum = 0;
        int result;
        String s = "1001010101011010111001011101010101010101";
        for(int i = s.length()-1; i <= 0; i--){
            result = (int)Math.pow(2, i);
            if(s.charAt(i) == '1')
                sum=sum + result;
        }
        System.out.println(sum);
    }
    }

使用循环读取(charAt())输入字符串中的每个数字(0/1 char),从右向左扫描;

使用循环构建所需的2的幂;

使用条件语句分别处理0和1;

使用简单输入进行调试,例如1,10,101,并在循环中打印中间值。

使用您的程序查找以下二进制数的小数值:

1001010101011010111001011101010101010101

4 个答案:

答案 0 :(得分:1)

仅当您的十进制值最多为2147483647或者int可以使用Java时的最大值时,才执行此操作。如果您不知道,只需检查字符串的长度。如果它小于或等于32,即4个字节,那么你可以使用parseInt。:

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

有关Integer.parseInt()的更多信息,请参阅HERE;

但如果更多,您可以使用您的代码。我修改了你的问题所在的循环:

 String s = "1001010101011010111001011101010101010101";
 long result = 0;
 for(int i = 0; i < s.length(); i++){
    result = (long) (result + (s.charAt(i)-'0' )* Math.pow(2, s.length()-i-1));
  }
    System.out.println(result);

答案 1 :(得分:1)

循环从i = s.length() - 1开始,直到i <= 0.这应该是i> = 0。
下一个问题是“int result”。它的结果很好;但是(原因:你在MostSignificantBit计算一个40位值,但整数只使用32位) 另外:你从最右边的位开始,i = s.length() - 1。但是你为它计算的功率是2 ^(s.length() - 1),尽管它应该是2 ^ 0 = 1。 解决方案是:result =(long)Math.pow(2,s.length() - 1-i)

编辑: 我非常喜欢user2316981的解决方案,因为它结构清晰(没有Math.pow,应该通过使用shift来更快)。并且从0到MSB循环,就像我使用Double&amp; Add算法一样。暂无法评论,但感谢提醒;)

答案 2 :(得分:1)

我注意到的第一件事是你的二进制数超过32位。这不能在int的空间中表示,并且会导致溢出。

作为一个更简单的答案,我运行以下内容并在最后得到正确的值,它只使用简单的位移。

对于字符串中的每个索引,如果字符为1,则设置结果中的相应位。

public class BinaryToDecimal {
    public static void main(String[] args) {
        long sum;
        String bin = "1001010101011010111001011101010101010101";
        sum = 0;
        for (int i = 0; i < bin.length(); i++) {
            char a = bin.charAt(i);
            if (a == '1') {
               sum |= 0x01;
            }
            sum <<= 1;
        }
        sum >>= 1;
        System.out.println(sum);
    }
 }

答案 3 :(得分:0)

import java.util.*;
import java.lang.Math;

class deci {

    int convert(int n) {
        int tem=1,power=0;
        int decimal=0;
        for (int j=0;j<n;j++) {
            if(n==0) {
                break;
            } else {
                while(n>0) {
                    tem=n%10;
                    decimal+=(tem*(Math.pow(2,power)));
                    n=n/10;
                    power++;
                }
            }    
        } 
        return decimal;
    }

    public static void main(String args[]) {
        System.out.print("enter the binary no");
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        deci dc=new deci();
        int i=dc.convert(n);
        System.out.print(i);
    }

}