我必须创建一个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
答案 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);
}
}