5

这是我在java中看到的,它让我很困惑。

Long.toHexString(0xFFFFFFFF)返回ffffffffffffffff

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

4

4 回答 4

10

这:

Long.toHexString(0xFFFFFFFF)

相当于:

Long.toHexString(-1)

这相当于:

Long.toHexString(0xFFFFFFFFFFFFFFFFL)

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

Long.toHexString(0xFFFFFFFFL)
于 2012-01-30T14:53:46.777 回答
10

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

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

于 2012-01-30T14:56:11.247 回答
2

当然,Long在java中是64位长的!0xFFFFFFFF表示-1int,当以 64 位写入时,它是ffffffffffffffff.

但是,如果数字是无符号的,则字符串也将是ffffffff[但unsigned在 java 中没有]。

于 2012-01-30T14:54:07.163 回答
2

0xFFFFFFFFint文字。当使用ints(Java 中的 32 位)时,0xFFFFFFFF等于-1. 你的代码做什么:

  • 编译器解析0xFFFFFFFFint带值-1
  • java运行时调用Long.toHexString(-1)-1get“casted”自动到long这里预期的a)

当使用longs (Java 中的 64 位)时-10xffffffffffffffff.

long文字由L. 因此,您的预期行为用 Java 编写为:

Long.toHexString(0xFFFFFFFFL)

并且Long.toHexString(0xFFFFFFFFL)"ffffffff"

于 2012-01-30T15:00:18.477 回答