Integer.valueOf()的小问题

此去苍茫 2010-02-06 09:28:41
我建立了一个方法产生随机的固定长度的二进制串



public char[] nextBitArray(){

char[] temp = new char[length];
for(int i=0; i<length; i++)
temp[i] = random.nextBoolean() ? '0' : '1';

return temp;
}




现在需要求这个二进制串对应的十进制整数:


int x;
for(int i=0; i< length; i++)
x += Math.pow(2,(length-i))*(Integer.valueOf(BitArray[i]-48));



我本以为写成
x += Math.pow(2,(length-i))*(Integer.valueOf(BitArray[i]));
就可以了,但发现必须在在valueOf里减48才能得到正确的结果,为什么valueOf()里面是char type的时候要减48呢?

谢谢指教:)
...全文
420 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
learninmylife 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luoluo83 的回复:]
那如果是 Integer.valueOf(“1”)是string type的话就不需要考虑ASCII码可以直接转换成整形?
[/Quote]

API 有关于这个的说明。说的很明白的。
你的例子中:

Integer.valueOf(BitArray[i]-48);

调用的是 Integer.valueOf(int); 方法
learninmylife 2010-02-06
  • 打赏
  • 举报
回复

public char[] nextBitArray(){

char[] temp = new char[length];
for(int i=0; i<length; i++)
temp[i] = random.nextBoolean() ? 0 : 1; // 这里修改成了直接使用 int
// char ‘0’ 对应的 int 是 48 , char '1' 对应 49 以此类推..

return temp;
}


这样便是你要的。
此去苍茫 2010-02-06
  • 打赏
  • 举报
回复
那如果是 Integer.valueOf(“1”)是string type的话就不需要考虑ASCII码可以直接转换成整形?
liaojianbiao 2010-02-06
  • 打赏
  • 举报
回复
temp[i] = random.nextBoolean() ? '0' : '1';
得到的是字符 ‘0’的字符码是48.所以要减去48
‘1’的字符码是49所以减去48得到1
rumlee 2010-02-06
  • 打赏
  • 举报
回复
字符'0'的ascii码是48。字符'0'如果直接转换成整数的话就是48,'1'对应49,依次类推。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧