2016-10-02 10 views
-2

私はJavaを初めて使用しています。だから、私はそれの背後にある作業を理解したい。JavaのByteとIntの左シフト

int one_int = 1; 
byte one = 1; 
one <<= 7; 
one_int <<= 7; 
System.out.println(one_int); //Output is 128 
System.out.println(one); //Output is -128 

なぜint型の左シフトの出力は128で、バイトに-128のですか?

+2

バイトの最初のビットは符号ビットです。したがって、1000 0000 => -128ですが、整数の8番目のビットは整数の一部に過ぎません。 0000 0000 0000 0000 0000 0000 1000 000のように、整数の符号ビットは正しいものからバイトのものと異なります – Adem

+0

[シフト演算子はどのようにJavaで動作しますか?](http://stackoverflow.com/questions/10910913)/how-do-shift-operators-work-in-java) –

+0

@vatsalmevada私はこれが良いビットではないと思っています。 – dasblinkenlight

答えて

3

として解釈さ10000000 一つ

  • int型は32ビットで構成されて
  • バイトから構成され、8ビット

あなたは7回、左バイトシフト:

00000001 - >あなたはint型7回は左にシフト

10000000:

0000000000000000000000000001 - > 0000000000000000000010000000

これらはどちらもプレゼンテーションに使用されるためntの符号付きおよび符号なしの数値の場合は、Two's complement操作を使用します。

これは、最初のビット(MSB)が数値の符号(+は0、 - は1)を表します。

+0

ありがとう、エリック。 –

0

両方のシフト演算で同じバイナリ値が10000000 になります。違いは、その値の最上位ビットの解釈にあります。

符号付き整数の最上位ビットは、その数が正(0)か負(1)かを決定します。その最上位ビットがゼロであるよう

  • int正128
  • 「バイト」は、そうその最上位8ビットタイプであるとしてしたがって10000000 が解釈され、32ビット型でありますビットは、したがって、Javaで負-128
+0

ありがとう@dasblinkenlight –

+0

@VishalSharmaよろしくお願いします。これがあなたの質問に答えるなら、それの隣にあるチェックマークをクリックして回答の一つを受け入れることを検討してください。 – dasblinkenlight

関連する問題