Java Long.parseLong在2';补语
我有以下代码,我正在做从十六进制到十进制的转换。Java Long.parseLong在2';补语,java,data-conversion,twos-complement,Java,Data Conversion,Twos Complement,我有以下代码,我正在做从十六进制到十进制的转换。 Long.parseLong(“FF44C5EC”,16)。 我得到的输出是这个4282697196 但它应该是一个负数。我还应该做些什么来获得2的补码的正确转换?返回一个有符号的long,但“有符号”表示如果您传递一个以-开头的字符串,它可以处理负数,而不是它知道2的补码 以指定的基数将字符串参数解析为有符号长字符串 第二个论点。字符串中的字符必须全部为数字 指定基数(由Character.digit(char, int)返回一个非负值),但第
Long.parseLong(“FF44C5EC”,16)
。
我得到的输出是这个4282697196
但它应该是一个负数。我还应该做些什么来获得2的补码的正确转换?返回一个有符号的long
,但“有符号”表示如果您传递一个以-
开头的字符串,它可以处理负数,而不是它知道2的补码
以指定的基数将字符串参数解析为有符号长字符串
第二个论点。字符串中的字符必须全部为数字
指定基数(由Character.digit(char,
int)返回一个非负值),但第一个字符可能
是ASCII减号“-”(“\u002D”)以指示负值或
表示正值的ASCII加号“+”(“\u002B”)。这个
返回结果long值
解决办法可以是:
Long.valueOf("FF44C5EC",16).intValue()
这会像你期望的那样打印出
-12270100
。为什么你认为它应该是负数?@因为我尝试通过这个网站转换它,你会得到十进制而不是2complement@Eklavya如何得到2的补码,因为我在谷歌上看到的一些地方说使用Long.parseLong,但我已经使用了,但仍然给了我那个大整数数字?我不明白,我不是在使用parseLong ready吗?那么我应该使用.intValue()吗?它能覆盖所有的大数字并正确地执行它吗?只是想知道你写了这样一句话:“parseLong返回一个带符号的长形,但通过“signed”它意味着如果你传递一个以-,而不是它知道2的补码开头的字符串,它可以处理负数。”所以它必须手动传递“-”是吗?如果传递-F
返回-15
,如果传递F
则返回16
。你也可以在你的机器上试一下:)是的,我试过了,就像你说的那样。所以我想我会接受你的答案Long.valueOf(“FF44C5EC”,16).intValue()。能覆盖大数字吗?