Java Long.parseLong 没有给出正确的 2 补码值
Java Long.parseLong does not give correct value in terms of 2's complement
我有以下代码,用于从十六进制到十进制的转换。
Long.parseLong("FF44C5EC",16)
。
我得到的输出是 4282697196
但按理说应该是负数。我还应该怎么做才能正确转换为 2 的补码?
parseLong
returns 有符号的 long
,但是 "signed" 意味着它可以处理负数,如果你传递一个以 -
开头的字符串,并不是说它知道 2 的补码。
Parses the string argument as a signed long in the radix specified by
the second argument. The characters in the string must all be digits
of the specified radix (as determined by whether Character.digit(char,
int) returns a nonnegative value), except that the first character may
be an ASCII minus sign '-' ('\u002D') to indicate a negative value or
an ASCII plus sign '+' ('\u002B') to indicate a positive value. The
resulting long value is returned.
解决方案可能是:
Long.valueOf("FF44C5EC",16).intValue()
如您所料打印 -12270100
。
我有以下代码,用于从十六进制到十进制的转换。
Long.parseLong("FF44C5EC",16)
。
我得到的输出是 4282697196
但按理说应该是负数。我还应该怎么做才能正确转换为 2 的补码?
parseLong
returns 有符号的 long
,但是 "signed" 意味着它可以处理负数,如果你传递一个以 -
开头的字符串,并不是说它知道 2 的补码。
Parses the string argument as a signed long in the radix specified by the second argument. The characters in the string must all be digits of the specified radix (as determined by whether Character.digit(char, int) returns a nonnegative value), except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a negative value or an ASCII plus sign '+' ('\u002B') to indicate a positive value. The resulting long value is returned.
解决方案可能是:
Long.valueOf("FF44C5EC",16).intValue()
如您所料打印 -12270100
。