我的代码的目的是将二进制数(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