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