解析 16 位短时出错
Error parsing 16 bit short
short: The short data type is a 16-bit signed two's complement integer. It has a minimum value of -32,768 and a maximum value of 32,767 (inclusive)
为什么会出现以下情况
System.out.println(Short.parseShort("1111111111111111", 2));
Return
java.lang.NumberFormatException: Value out of range.
An exception of type NumberFormatException is thrown if any of the following situations occurs:
The first argument is null or is a string of length zero.
The radix is either smaller than Character.MIN_RADIX or larger than Character.MAX_RADIX.
Any character of the string is not a digit of the specified radix, except that the first character may be a minus sign '-' ('\u002D') or plus sign '+' ('\u002B') provided that the string is longer than length 1.
The value represented by the string is not a value of type short.
我假设错误来自最后一个项目符号,但是
我认为使用 Short 时 16 个“1”位相当于 -1。因此,它应该是有效的?
1111111111111111
要转为65535
,大于short
所能表示的最大值(32,767)。尝试一些较小的数字。
您引用的 javadoc 声明 Short.parseShort
将数字解析为带符号的数字。
1111111111111111
(16 1
位)当作为有符号数读取时表示 216 - 1 或 65535。这太大而无法表示作为 short
.
备选方案:
如果有 parseShort
的替代方案来解析无符号值,那将可行。 (但是没有...)
您可以使用 Integer.parseInt
,对 int
结果进行范围检查,然后将其转换为 short
.
I thought 16 '1' bits is equivalent to -1 when using Short. Thus, it should be valid?
很遗憾,没有。 parseInt
方法解析有符号值。
思考实验:如果用户输入 1111111111111111
的意图是它真的意味着正数 signed;即 +65535?这如何与您认为 parse 方法将有符号和无符号视为可互换的想法相吻合?
short: The short data type is a 16-bit signed two's complement integer. It has a minimum value of -32,768 and a maximum value of 32,767 (inclusive)
为什么会出现以下情况
System.out.println(Short.parseShort("1111111111111111", 2));
Return
java.lang.NumberFormatException: Value out of range.
An exception of type NumberFormatException is thrown if any of the following situations occurs:
The first argument is null or is a string of length zero.
The radix is either smaller than Character.MIN_RADIX or larger than Character.MAX_RADIX.
Any character of the string is not a digit of the specified radix, except that the first character may be a minus sign '-' ('\u002D') or plus sign '+' ('\u002B') provided that the string is longer than length 1.
The value represented by the string is not a value of type short.
我假设错误来自最后一个项目符号,但是 我认为使用 Short 时 16 个“1”位相当于 -1。因此,它应该是有效的?
1111111111111111
要转为65535
,大于short
所能表示的最大值(32,767)。尝试一些较小的数字。
您引用的 javadoc 声明 Short.parseShort
将数字解析为带符号的数字。
1111111111111111
(16 1
位)当作为有符号数读取时表示 216 - 1 或 65535。这太大而无法表示作为 short
.
备选方案:
如果有
parseShort
的替代方案来解析无符号值,那将可行。 (但是没有...)您可以使用
Integer.parseInt
,对int
结果进行范围检查,然后将其转换为short
.
I thought 16 '1' bits is equivalent to -1 when using Short. Thus, it should be valid?
很遗憾,没有。 parseInt
方法解析有符号值。
思考实验:如果用户输入 1111111111111111
的意图是它真的意味着正数 signed;即 +65535?这如何与您认为 parse 方法将有符号和无符号视为可互换的想法相吻合?