将二进制转换为十进制并翻转 0 和 1 JAVA
Converting binary to decimal and flipping 0 and 1 JAVA
public static int reverseIntBitwise(int value) {
String res = String.format("%32s",
Integer.toBinaryString(value)).replace(' ', '0');
char[] charArray = res.toCharArray();
for(int i=0; i<charArray.length; i++){
if(charArray[i] == '0'){
charArray[i]='1';
}else if(charArray[i]=='1'){
charArray[i]='0';
}
}
String res2 = new String(charArray);
return Integer.parseInt(res2, 2);
}
所以 res = 00000000000000000000000000101110
和 res2 = 11111111111111111111111111010001
但是当我尝试将其转换回 int 时,控制台中会显示:
Exception in thread "main" java.lang.NumberFormatException: For input string: "11111111111111111111111111010001"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at com.company.Main.reverseIntBitwise(Main.java:169)
at com.company.Main.main(Main.java:150)
谁能帮忙解决这个问题?
谢谢
二进制 11111111111111111111111111010001
的十进制数会溢出整数数据类型。
使用长。
您得到 NumberFormatException
,因为结果数字 4294967249
超出了 Integer
的范围(即超过 Integer.MAX_VALUE
)。您可以尝试 BigInteger
代替,例如:
String res2 = "11111111111111111111111111010001";
System.out.println(new BigInteger(res2, 2));
public static int reverseIntBitwise(int value) {
String res = String.format("%32s",
Integer.toBinaryString(value)).replace(' ', '0');
char[] charArray = res.toCharArray();
for(int i=0; i<charArray.length; i++){
if(charArray[i] == '0'){
charArray[i]='1';
}else if(charArray[i]=='1'){
charArray[i]='0';
}
}
String res2 = new String(charArray);
return Integer.parseInt(res2, 2);
}
所以 res = 00000000000000000000000000101110 和 res2 = 11111111111111111111111111010001
但是当我尝试将其转换回 int 时,控制台中会显示:
Exception in thread "main" java.lang.NumberFormatException: For input string: "11111111111111111111111111010001"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at com.company.Main.reverseIntBitwise(Main.java:169)
at com.company.Main.main(Main.java:150)
谁能帮忙解决这个问题? 谢谢
二进制 11111111111111111111111111010001
的十进制数会溢出整数数据类型。
使用长。
您得到 NumberFormatException
,因为结果数字 4294967249
超出了 Integer
的范围(即超过 Integer.MAX_VALUE
)。您可以尝试 BigInteger
代替,例如:
String res2 = "11111111111111111111111111010001";
System.out.println(new BigInteger(res2, 2));