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