这是我在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文字。当使用ints(Java 中的 32 位)时,0xFFFFFFFF等于-1. 你的代码做什么:
0xFFFFFFFF为int带值-1Long.toHexString(-1)(-1get“casted”自动到long这里预期的a)当使用longs (Java 中的 64 位)时-1是0xffffffffffffffff.
long文字由L. 因此,您的预期行为用 Java 编写为:
Long.toHexString(0xFFFFFFFFL)
并且Long.toHexString(0xFFFFFFFFL)是"ffffffff"