Jea*_*eri 8 java binary casting
我正在尝试将几个二进制字符串转换回int.但它没有转换我的所有二进制字符串,留下了java.lang.NumberFormatException异常.这是我的测试代码,带有3个二进制字符串:
public class Bin {
public static void main(String argvs[]) {
String binaryString ;
binaryString = Integer.toBinaryString(~0);
//binaryString = Integer.toBinaryString(~1);
//binaryString = "1010" ;
int base = 2;
int decimal = Integer.parseInt(binaryString, base);
System.out.println("INPUT=" + binaryString + " decimal=" + decimal) ;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我转换"1010"它很有效,但是当我尝试转换其他两个中的一个时,我得到了异常.有人能解释一下为什么会这样吗?
干杯
如上所述,Integer.toBinaryString()将〜0和~1转换为unsigned int,因此它们将超过Integer.MAX_VALUE.
您可以使用long来解析并转换回int,如下所示.
int base = 2;
for (Integer num : new Integer[] {~0, ~1}) {
String binaryString = Integer.toBinaryString(num);
Long decimal = Long.parseLong(binaryString, base);
System.out.println("INPUT=" + binaryString + " decimal=" + decimal.intValue()) ;
}
Run Code Online (Sandbox Code Playgroud)
来自http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#toBinaryString(int):该toBinaryString()方法将其输入转换为" 无符号整数值的二进制表示形式" 如果参数为负,则参数加上2 32.
来自http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#parseInt(java.lang.String,%20int):如果" 由...表示的值,则parseInt()抛出该方法字符串不是类型 " 的值.NumberFormatExceptionint
注意,这两个~0和~1为负(-1和-2分别),因此将被转换为2的二进制表示32 -1和2 32 -2分别,两者都不可以以类型的值来表示int,所以使NumberFormatException你看到了.
| 归档时间: |
|
| 查看次数: |
29690 次 |
| 最近记录: |