尝试打印 32 位二进制数的反向时出现 NumberFormatException
NumberFormatException while trying to print reverse of 32 bit binary number
我正在尝试以十进制格式打印 32 位二进制数的反转:
示例:
x = 3,
00000000000000000000000000000011
=> 11000000000000000000000000000000
return 3221225472
我收到一个数字格式异常,任何人都可以帮我看看我的代码有什么问题吗?感谢您的帮助。
public class ReverseBinary {
public long reverse(long a) {
String s1 = String.format("%32s", Long.toBinaryString(a)).replace(' ', '0');
StringBuilder sb = new StringBuilder(s1);
String s = sb.reverse().toString();
long c = Integer.parseInt(s, 2);
return c;
}
public static void main(String args[]) {
ReverseBinary rb = new ReverseBinary();
long ans = rb.reverse(3);
System.out.println(ans);
}
}
你的变量 c
可能是一个 long 变量,但 Integer.parseInt(s,2)
传递的值仍然是一个整数。此调用尝试解析导致问题的整数值,因为该值显然超出了整数范围。
只需将 Integer.parseInt(s,2)
替换为 Long.parseLong(s, 2)
。
应该是
long c= Long.parseLong(s,2);
以防万一您想要与反转位模式相对应的有符号整数:有一种方法可以做到这一点。
public class Test
{
public static void main (String[] args)
{
// 000...001 -> 100...000, interpret as two's complement 32bit int
int reversed = Integer.reverse(0b0_00000000_00000000_00000000_00000001);
System.out.println(reversed == Integer.MIN_VALUE); // -> true
}
}
我正在尝试以十进制格式打印 32 位二进制数的反转: 示例:
x = 3, 00000000000000000000000000000011 => 11000000000000000000000000000000
return 3221225472
我收到一个数字格式异常,任何人都可以帮我看看我的代码有什么问题吗?感谢您的帮助。
public class ReverseBinary {
public long reverse(long a) {
String s1 = String.format("%32s", Long.toBinaryString(a)).replace(' ', '0');
StringBuilder sb = new StringBuilder(s1);
String s = sb.reverse().toString();
long c = Integer.parseInt(s, 2);
return c;
}
public static void main(String args[]) {
ReverseBinary rb = new ReverseBinary();
long ans = rb.reverse(3);
System.out.println(ans);
}
}
你的变量 c
可能是一个 long 变量,但 Integer.parseInt(s,2)
传递的值仍然是一个整数。此调用尝试解析导致问题的整数值,因为该值显然超出了整数范围。
只需将 Integer.parseInt(s,2)
替换为 Long.parseLong(s, 2)
。
应该是
long c= Long.parseLong(s,2);
以防万一您想要与反转位模式相对应的有符号整数:有一种方法可以做到这一点。
public class Test
{
public static void main (String[] args)
{
// 000...001 -> 100...000, interpret as two's complement 32bit int
int reversed = Integer.reverse(0b0_00000000_00000000_00000000_00000001);
System.out.println(reversed == Integer.MIN_VALUE); // -> true
}
}