输出错误:二进制到十进制java



我的代码的目的是将二进制数(String)n转换为十进制形式此程序段编译成功,但输出比预期的要大得多。

需要一些帮助。提前感谢

public class bindecstr {
public static void main(String args[]){
    String s="11111";
    int l=s.length();
    double sum=0;
    int t=l-1;
for(int i=0;i<l;i++){   
    char ch=s.charAt(i);
    int x=(int)ch;
    double d=(Math.pow(2,t-i))*x;
    sum=sum+d;
}
System.out.println(sum);
}
}

这是因为s.charAt(i)是数字的字符代码,而不是它的数值。'0'的UNICODE码点为U+0030;对于'1',为U+0031

改变

int ch=s.charAt(i) - '0';

来解决这个问题(ideone上的演示)。这样做的原因是数字的代码点是按顺序排列的。用另一个十进制数字的码点减去零码点,就得到该码点与对应数字之间的"距离",该距离对应于该数字的数值。

try this

int x = (int) ch - '0';

当你输入int x=(int)ch;保存在x中的值不是1,它对应的unicode值是49所以要取1的实际值你需要在for循环中使用if语句
char ch=s.charAt(i); if(ch=='1') x=1 if(ch=='0') x=0

最新更新