二进制字符串转化为十进制数字
2013-01-29 11:59
169 查看
今天在进行二进制字符串转化为十进制数字的时候,感觉明明是在范围内却报异常了,很是奇怪。百度了一下
java里面,这条语句Integer.parseInt("80000000",16)怎么抛出NumberFormatException?
Integer默认为32位存储空间,parseInt转换时保留符号位(也就是需要显式的输入"-"去表示负数),则剩下31位,最大表示的16进制数字为7FFF FFFF,8000 0000 的二进制为1000 0000 0000 0000 0000 0000 0000 000,不符合转换规则 因此,16进制表示integer范围就是 ±7FFF FFFF,你输入的数字被视为﹢8000 0000,超出范围,抛出NumberFormatException,不冤枉
原来是parseInt这个函数自己在转化的时候转化的范围并不是我们以为的那样,比如转化为int但是输入参数范围并不能是int的最大值。
为此做了一个测试
int f = -2147483648; System.out.println(Integer.toBinaryString(f)); System.out.println(Integer.parseInt(Integer.toBinaryString(f),2));结果为10000000000000000000000000000000Exception in thread "main" java.lang.NumberFormatException: For input string: "10000000000000000000000000000000" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:461) at NumberTest.main(NumberTest.java:91)可见这是parseInt这个函数的问题,所以只好用更大的数据类型long来进行转化了
相关文章推荐
- 二进制字符串转化为十进制数字,感觉明明是在范围内却报异常了
- 将一个十进制数字转化为x进制/将x进制的字符串转换成10进制
- LeetCode425——Add Strings(两个字符串中的数字相加(十进制或二进制),输出字符串形式的结果)
- C++将十进制数字转化为X 进制的字符串
- php 汉字转化成 二进制 十进制 十六进制 数字
- 十进制转化为二进制和十六进制的字符串
- 面试题: 十进制INT数字转化为16进制字符串、实现字符串和数字的相互转化
- Java数值转化为二进制、十进制、十六进制字符串
- Android中 二进制、十进制、十六进制串、byte数组、字符串、ASCII之间的相互转化
- Java中十进制与二进制、八进制以及十六进制的转化
- 将一串数字转化为中文字符串,使用 C# 将数字转换成大写人民币 (例如:用户输入2300,系统就会显示两千三百元 )
- P122 第20题 将十进制转化成二进制或八进制或16进制输出
- 十进制转化为二进制
- python 将二进制字符串转化为字符串 Convert bytes to a Python string
- js将数字转化为带有千分号的字符串
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- 程序题——字符串转化成为数字
- C# 判断字符串是否可以转化为数字
- c++数字转化为字符串、字符串转换为数字
- 模拟atoi函数,从字符串到数字的转化