これは私が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)
基本的に、問題は、負の値を指定していることです。これは、「すべての F」で構成されるint同等の負の long値に変換されます。本当に8 つの F が必要な場合は、次を使用する必要があります。
Long.toHexString(0xFFFFFFFFL)
他の人が言ったように、 int valueに0xFFFFFFFF評価され、a に昇格します。-1long
期待どおりの結果を得るには、定数を接尾辞で修飾して、としてL扱う必要があることを示します。longLong.toHexString(0xFFFFFFFFL)
0xFFFFFFFFはintリテラルです。ints (Java では 32 ビット)を使用する場合は、0xFFFFFFFFと等しくなり-1ます。あなたのコードは何をしますか:
0xFFFFFFFFとして解析しますint-1Long.toHexString(-1)(ここで期待される に-1自動的に「キャスト」されます)longまた、longs (Java では 64 ビット)を使用する場合-1は0xffffffffffffffff.
longリテラルは . によって後置固定されますL。したがって、期待される動作は Java で次のように記述されます。
Long.toHexString(0xFFFFFFFFL)
そしてLong.toHexString(0xFFFFFFFFL)_"ffffffff"
もちろん、LongJava では 64 ビット長です。0xFFFFFFFFは を意味-1し、int64 ビットで記述した場合は ですffffffffffffffff。
ただし、番号が署名されていない場合、文字列もffffffff[ただしunsignedJava にはありません] になります。