私は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のですか?
私は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のですか?
として解釈さ10000000 一つ
あなたは7回、左バイトシフト:
00000001 - >あなたはint型7回は左にシフト
10000000:
を0000000000000000000000000001 - > 0000000000000000000010000000
これらはどちらもプレゼンテーションに使用されるためntの符号付きおよび符号なしの数値の場合は、Two's complement操作を使用します。
これは、最初のビット(MSB)が数値の符号(+は0、 - は1)を表します。
ありがとう、エリック。 –
両方のシフト演算で同じバイナリ値が10000000 になります。違いは、その値の最上位ビットの解釈にあります。
符号付き整数の最上位ビットは、その数が正(0)か負(1)かを決定します。その最上位ビットがゼロであるよう
int
正128ありがとう@dasblinkenlight –
@VishalSharmaよろしくお願いします。これがあなたの質問に答えるなら、それの隣にあるチェックマークをクリックして回答の一つを受け入れることを検討してください。 – dasblinkenlight
バイトの最初のビットは符号ビットです。したがって、1000 0000 => -128ですが、整数の8番目のビットは整数の一部に過ぎません。 0000 0000 0000 0000 0000 0000 1000 000のように、整数の符号ビットは正しいものからバイトのものと異なります – Adem
[シフト演算子はどのようにJavaで動作しますか?](http://stackoverflow.com/questions/10910913)/how-do-shift-operators-work-in-java) –
@vatsalmevada私はこれが良いビットではないと思っています。 – dasblinkenlight