为什么Long.toHexString(0xFFFFFFFF)返回ffffffffffffffff

Vic*_*Vic 4 java twos-complement

这就是我在java中看到的,它让我感到困惑.

Long.toHexString(0xFFFFFFFF) 回报 ffffffffffffffff

同样,0xFFFFFFFFLong.parseLong("FFFFFFFF", 16)不相等.

Jon*_*eet 8

这个:

Long.toHexString(0xFFFFFFFF)
Run Code Online (Sandbox Code Playgroud)

相当于:

Long.toHexString(-1)
Run Code Online (Sandbox Code Playgroud)

这相当于:

Long.toHexString(0xFFFFFFFFFFFFFFFFL)
Run Code Online (Sandbox Code Playgroud)

基本上,问题在于您指定了一个负值int,然后将其转换为等效的负值,该值由"所有F"组成.如果你真的想要 8 F,你应该使用:

Long.toHexString(0xFFFFFFFFL)
Run Code Online (Sandbox Code Playgroud)


Gra*_*and 7

正如其他人所说,0xFFFFFFFF评估为int-1,将其提升为a long.

为了获得您期望的结果,使用L后缀限定常量以指示它应被视为a long,即Long.toHexString(0xFFFFFFFFL).