127 + 1 = -128のバイトタイプのjava?

トピックは次のとおりです。

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番目の出力も同様です。

プロテスト、ありがとうございます。

おすすめ

転載: blog.csdn.net/cyberHerman/article/details/89357421