我必须创建一个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
循环从i=s.length()-1运行到i
编辑:我真的很喜欢user2316981的解决方案,因为它的结构清晰(没有Math.pow,应该更快地使用移位代替)。循环从0到MSB,就像我对双一样
我首先注意到的是你的二进制数超过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);
}
}
仅当十进制值最多为2147483647或整数在Java中的最大值时,才执行此操作。如果你不知道,只需检查你的字符串长度。如果小于或等于32,即4个字节,则可以使用parseInt.:
int decimalValue = Integer.parseInt(s, 2);
有关整数的更多信息,请参阅此处。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);
本文向大家介绍Java 程序实现八进制转换为二进制,十进制,十六进制,包括了Java 程序实现八进制转换为二进制,十进制,十六进制的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个八进制数字。要将八进制转换为其他进制,例如二进制,十六进制等,Java代码如下: 示例 输出结果 一个名为Demo的类包含一个名为“base_convert”的函数。此函数将整数从源基解析为目标基,将其转换为字符串
用户用十六进制或二进制输入一个数字(必须以0x或0b为前缀,如果没有给出错误信息) 我不能用基数,我只是用整数。parseInt(s) 我不知道怎样才能使这个计划奏效。。请帮帮我,我还缺什么?
我正在尝试将数字从十进制值转换为其IEEE 752形式。例如: 我写了这个方法: 有个问题我解决不了,我再举个例子说清楚。 但是当数字为负数时,例如 我收到以下错误: 这意味着我的代码可以完美地处理正数(包括零),但如果是负数,代码就会崩溃。问题出在哪里? 笔记 我想我可以用这种方式解决我的问题 检查是否有一个字符At(0)等于1 如果是(numero.charAt(0)==1),则删除第一个字符
问题内容: 我正在尝试编写将数字转换为二进制的代码,这就是我写的。它给了我一些我不理解的Eclipse错误。怎么了 还有其他建议吗?我想学习并听取任何修复建议。谢谢。 错误消息: 类型中的方法不适用于参数() 这行有多个标记 令牌“ ”的语法错误,;; 预期 令牌“ ”的语法错误,;; 预期 是变量的无效类型 这行有多个标记 令牌“ mod”的语法错误,无效的AssignmentOperator
问题内容: 我写了一些代码将十六进制显示字符串转换为十进制整数。但是,当输入类似100a或625b(带有字母的东西)时,我得到了这样的错误: java.lang.NumberFormatException:对于输入字符串:java.lang.Integer.parseInt(未知源)处的java.lang.NumberFormatException.forInputString(未知源)处为“ 1
我正在写一个Rust程序,读取I2C总线并保存数据。当我读取I2C总线时,我会得到十六进制值,比如,,等等。 现在,我只能将其作为字符串处理并按原样保存。有没有办法把它解析成一个整数?它有内置的功能吗?