5

これは私がJavaで見たものであり、私を困惑させます。

Long.toHexString(0xFFFFFFFF)戻り値ffffffffffffffff

同様に、0xFFFFFFFFLong.parseLong("FFFFFFFF", 16)は等しくありません。

4

4 に答える 4

10

これ:

Long.toHexString(0xFFFFFFFF)

次と同等です。

Long.toHexString(-1)

これは次と同等です:

Long.toHexString(0xFFFFFFFFFFFFFFFFL)

基本的に、問題は、負の値を指定していることです。これは、「すべての F」で構成されるint同等の負の long値に変換されます。本当に8 つの F が必要な場合は、次を使用する必要があります

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

他の人が言ったように、 int valueに0xFFFFFFFF評価され、a に昇格します。-1long

期待どおりの結果を得るには、定数を接尾辞で修飾して、としてL扱う必要があることを示します。longLong.toHexString(0xFFFFFFFFL)

于 2012-01-30T14:56:11.247 に答える
2

0xFFFFFFFFintリテラルです。ints (Java では 32 ビット)を使用する場合は、0xFFFFFFFFと等しくなり-1ます。あなたのコードは何をしますか:

  • コンパイラはwith 値0xFFFFFFFFとして解析しますint-1
  • Java ランタイム呼び出しLong.toHexString(-1)(ここで期待される に-1自動的に「キャスト」されます)long

また、longs (Java では 64 ビット)を使用する場合-10xffffffffffffffff.

longリテラルは . によって後置固定されますL。したがって、期待される動作は Java で次のように記述されます。

Long.toHexString(0xFFFFFFFFL)

そしてLong.toHexString(0xFFFFFFFFL)_"ffffffff"

于 2012-01-30T15:00:18.477 に答える
2

もちろん、LongJava では 64 ビット長です。0xFFFFFFFFは を意味-1し、int64 ビットで記述した場合は ですffffffffffffffff

ただし、番号が署名されていない場合、文字列もffffffff[ただしunsignedJava にはありません] になります。

于 2012-01-30T14:54:07.163 に答える