这就是我在java中看到的,它让我很困惑。
Long.toHexString(0xFFFFFFFF)
返回ffffffffffffffff
同样,0xFFFFFFFF
和Long.parseLong("FFFFFFFF", 16)
不相等。
答案 0 :(得分:9)
此:
Long.toHexString(0xFFFFFFFF)
相当于:
Long.toHexString(-1)
相当于:
Long.toHexString(0xFFFFFFFFFFFFFFFFL)
基本上,问题在于您指定了负int
值,然后将其转换为等效的负 long 值,该值由“所有F”组成。如果你真的想要 8 Fs,你应该使用:
Long.toHexString(0xFFFFFFFFL)
答案 1 :(得分:7)
正如其他人所说,0xFFFFFFFF
评估为 int 值-1
,该值已提升为long
。
要获得您期望的结果,请使用L
后缀限定常量,以表明它应被视为long
,即Long.toHexString(0xFFFFFFFFL)
。
答案 2 :(得分:2)
当然,java中的Long
长度为64位! 0xFFFFFFFF
表示-1
为int
,当以64位写入时,ffffffffffffffff
。
但是,如果数字是无符号的,那么字符串也是ffffffff
[但是java中没有unsigned
。
答案 3 :(得分:1)
0xFFFFFFFF
是一个int
字面值。使用int
时(Java中为32位)0xFFFFFFFF
等于-1
。你的代码做了什么:
0xFFFFFFFF
解析为int
,其值为-1
Long.toHexString(-1)
(-1
得到“自动”转换为long
,这是预期的。使用long
时(Java中为64位)-1
为0xffffffffffffffff
。
long
文字由L
后固定。因此,您的预期行为是用Java编写的:
Long.toHexString(0xFFFFFFFFL)
且Long.toHexString(0xFFFFFFFFL)
为"ffffffff"