トピックは次のとおりです。
public static void main(String[] args) {
Byte a = 127;
System.out.println(++a);
System.out.println(++a);
System.out.println(++a);
}
出力結果:
-128
-127
-126
そうですね、少し恥ずかしい思いをする人もいると思います。最初にやったので考えてみたところ、まずバイトレンジは-128〜127です。バイト長は8ビット、左端は符号ビット、127のバイナリは0111 1111であるため、++ aを実行すると、0111111は10000000になります。ご存知のように、コンピューターは負の数を補数の形で保存します。左側の最初のビットは符号ビットです。
次に、javaの負の数の補数は、次のように10進数に変換されます。
数値が正の場合、元のコード、補数、および補数は同じです。正の数値の補数を10進数に変換すると、直接変換できます。
負の数の補数を知って、それを10進数に変換します。手順は次のとおりです。
1.最初に全員を逆にします。
2.それを10進数に変換します。
3.マイナス記号を追加し、1を減算します。
例えば:
11111010では、最上位の桁は1で、負の数です。最初に、各ビットを反転して00000101を取得し、10進数に変換すると、5にマイナス記号を加えて-5を取得し、次にマイナス1を取得して-6を取得します。
これが説得力のある写真です:
図から、127の補数、元のコード、逆コードはすべて0111 1111であり、1を足して1000 0000になり、この時点で1000 0000(左側の最初の桁は1、負の数、補数)がバイナリに変換されていることがわかります。いくらですか?図に従って表示することも、上記の方法で自分で計算することもできます。
1. 0111 1111のように、最初に全員を反転します
2.バイナリ127に変換します。
3.マイナス記号-127を加算し、1を-128に減算します。したがって、最初の出力は-128になります。
下を見下ろすと、2番目の出力は-127です。どのようにして得られたのですか?初めてコンピューターを追加すると、1000 0000になり、1を追加して1000 0001になり、バイナリに変換します。
1. 0111 1110のように、最初に全員を反転します
2.バイナリ126に変換します
3.マイナス記号-126を加算し、-127に1を減算します。
3番目の出力も同様です。
プロテスト、ありがとうございます。