初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
負のシフト演算子
ここでは負のシフト演算子の計算をしていきます。
byte b = -17;
b >> 2;
について考えてみたいと思います。負の2進数の計算の仕方
まず、17を2で割っていきます。
17を2で割ると8になり余りが1になります。次に8を2で割れば4になり余りは0になります。
4を2で割れば2になり余りが0になり2を2で割れば1になり余りが0です。
ここまでは正の数と同じになります。
00010001
でした。しかし負の場合は少し違います。
負の場合はこの正の数の結果を1と0を反転してなおかつそれに1を足します
まず、反転してみます。
00010001これを反転すると
11101110になりそれにさらに1を加えます。すると以下のようになります。
11101111これが byte b = -17;を2進数で表した値になります。
負のシフト演算の仕方
負の場合は右辺で指定したケタ数だけ右に移動して、左端に1を埋めます。したがってこのようになります。
1111101111
つまり青の太字だけ右に移動し移動した分だけ左端に1が入ります。また、青の太字は右端からはみ出したので切り捨てられます。
したがって結果は
11111011になります。
10進数に戻します
byte型の -17 の右シフト演算の2進数の表記は
11111011
でした。それを10進数の表記に直します。まず、一番のポイントは2進数で一番先頭の数字が1の場合は10進数の負の数字になります。
負の10進数の変換の仕方はまた1と0を反転し1を足します。つまり
11111011
を反転すると00000100
になりそれに1を足します。すると00000101
になります。0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
になり計算すると
1 + 4 = 5 になります。
ではサンプルプログラムで確認します。
サンプルプログラム(Sample20.java)
class Sample20{ public static void main(String args[]){
byte b = -17; System.out.println(" b >> 2 : " + ( b >> 2) ); } }
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
コンパイル・実行してみます
先ほど計算で求めた値が出力されました。