我需要编写一个可以将位转换为十进制的程序。每当我输入一点,它只输出0.0。我无法弄清楚为什么。我知道它非常简单,但我只是没有看到它。任何帮助将不胜感激。
import java.lang.Math;
import java.util.Scanner;
public class Lab1 {
static double number = 0;
public static double toDec(String num) {
char[] charArray = num.toCharArray();
for(int i = 0; i<charArray.length;i++) {
if(charArray[i] == 1) {
number = Math.pow(2, charArray.length-i);
}
}
return number;
}
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int bit;
String bitString;
System.out.println("Please enter a bit");
bit = keyboard.nextInt();
bitString = Integer.toString(bit);
System.out.println(toDec(bitString));
}
}
答案 0 :(得分:6)
您已将charArray[i]
与1
进行了比较,但您将苹果与橙子进行比较,特别是char
与int
。
与char '1'
比较。
if(charArray[i] == '1') {
另外,您可以在number
中将toDec
作为局部变量;它不需要存在于该方法之外。
此外,这仅在设置了一位时有效。现在你正在使用一个bitonly,但如果你想修改它以使用多个位,则需要进行另一个更改。
每次调用number
并且条件为toDec
时,您都会覆盖true
。您可能希望使用number
添加+=
,而不是使用=
覆盖之前的值。
答案 1 :(得分:1)
Integer#parseInt(String str, int radix)完成工作:
public static Integer toDec(String num) {
return Integer.parseInt(num, 2);
}
答案 2 :(得分:0)
因此,如果你想取字符串“110011”,这是51.对于big-endian,你将不得不确定要处理多少位。因此,如果您读取字符串并且它长度为6位,那么您就知道第一位必须向左移动6位。
int l = 6;
long value = 0;
for( int i = 0; i < l; i++ )
{
int bit = ( charArray[i] == "1" ) ? 1 : 0;
l = l + ( bit << l-i );
}
对于float你基本上必须构建一个解释器来解码这些位,但浮点数用二进制表示。