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

我必须创建一个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

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

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

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

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

  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); 

我注意到的第一件事是你的二进制数超过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); } } 

循环从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&Add算法一样。 暂不公开评论,但感谢提醒;)

 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;j0) { 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); } }