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

Java program that converts binary numbers to decimal numbers. The input is a string of zeros and ones

我必须创建一个 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 字符),从右到左扫描;

使用循环构建所需的 2 次方;

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

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

使用您的程序求出以下二进制数的十进制值:

1001010101011010111001011101010101010101

仅当您的十进制值最多为 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);

循环从 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 应该会更快)。并像我使用 Double&Add 算法一样从 0 循环到 MSB。还不能评论,谢谢提醒 ;)

我首先注意到的是你的二进制数超过了 32 位。这不能用int的space表示,会导致溢出。

作为一个更简单的答案,我 运行 下面得到了正确的值,它只是使用简单的位移。

对于字符串中的每个索引,如果字符为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);
    }
 }
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);
    }

}