検索

ホームページ  >  に質問  >  本文

java - 为什么(byte)128等于-128

    System.out.println((byte) 128);//-128
大家讲道理大家讲道理2917日前676

全員に返信(3)返信します

  • 阿神

    阿神2017-04-18 10:12:02

    は Java の自動変換によって発生します。原理は次のとおりです。
    1. 128 は 32 ビットの整数で、最初の 24 桁はすべて 0、最後の 8 桁は 1000 0000< です。 🎜>
    2。バイトに変換された後の (byte)128 の最初のビットは 1 であり、Java はこれを負の数
    3 の補数識別子と見なします。 System.out.println が呼び出されると、Java 型システムが自動的にバイトを変換します。このとき、符号付き左シフト演算が実行され、最初の 24 ビットはすべて 1、最後の 8 ビットは 1000 になります。 0000、これはまだ -128.4 であるため、出力は -128
    となります。

    ヒント: Java はバイト演算を実行するときに自動的に型変換を実行する必要があり、符号なし整数はサポートされていません。通常は、自動拡張によって生じる間違ったビットを保護するために & 演算を使用する必要があります。

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 10:12:02

    バイトの値の範囲は-128~127、128はオーバーフローします

    返事
    0
  • 怪我咯

    怪我咯2017-04-18 10:12:02

    1. 128 は型 int 00000000 00000000 00000000 10000000 の整数、長さは 32 ビット

    2. byte 型の整数の長さは 8 ビットなので、キャスト後の最後の 8 ビットは 10000000

    3. になります。
    4. の最初のビットは左から右に符号ビットです。0 の値は 0~1271 の値は -128~-1

    5. System.out.println(int) を呼び出すと、Java は byte -128int -128

    6. に変換して戻します。
    7. それで (byte) 128 == (int) -128

    返事
    0
  • キャンセル返事