【发布时间】:2022-02-02 13:10:35
【问题描述】:
所以我正在尝试翻转 long int 的位,这就是我的做法,但我得到了 NumberFormatException。 我将其转换为 base-2 字符串并在左侧添加零以成为 32 字符,然后翻转位,然后将其转换回 base-10 的长整数。
Long n =4L;
String bits = String.format("%32s", Long.toBinaryString(n)).replace(' ', '0');
bits = bits.replace("0", "3");
bits = bits.replace("1", "0");
bits = bits.replace("3", "1");
return Long.parseLong(bits.trim(), 10);
转换为base 2后为4L:
00000000000000000000000000000100
在翻转所有位之后:,我得到了这个:
Exception in thread "main" java.lang.NumberFormatException: For input string: "11111111111111111111111111111011"
怎么了?我检查了不可打印的字符但没有,我还修剪了数字以防有多余的空格,我试图在最后添加 L 但没有任何效果,有什么问题?
【问题讨论】:
-
为什么不
Long.parseLong(bits.trim(), 2)? -
因为我想把它转换回base 10,它在base-2中作为一个字符串(称为位)
-
@HibaHasan:
10没有描述方法的输出,它必须描述输入(即字符串在),所以你必须在这里使用, 2。除此之外,您还会遇到一个问题,因为long是有符号的,并且具有 32 位数字和前导 1 的二进制数超出了有符号长整数的有效范围。 -
你们都说得对,我认为基数是我需要的输出,但结果是输入
标签: java exception type-conversion base numberformatexception