負のシフト演算子

ここでは負のシフト演算子の計算をしていきます。

byte b = -17;

b >> 2;

について考えてみたいと思います。

負の2進数の計算の仕方

まず、17を2で割っていきます。
17を2で割ると8になり余りが1になります。次に8を2で割れば4になり余りは0になります。
4を2で割れば2になり余りが0になり2を2で割れば1になり余りが0です。
ここまでは正の数と同じになります。

正の数のbyte型の17は

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 になります。

しかしこの値は負であるので -5になります。

ではサンプルプログラムで確認します。

サンプルプログラム(Sample20.java)

class  Sample20{
    public static void main(String args[]){
byte b = -17; System.out.println(" b >> 2 : " + ( b >> 2) ); } }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます

先ほど計算で求めた値が出力されました。

ページのトップへ戻る