勉強: シフト演算とは


シフト演算とは

・2進数をあらわすビット列を、左もしくは右にずらす操作をシフト演算と呼びます

前知識

・2進数
  2進数とは0と1のみで数字を表したもの
  普段使っている数は10進数であり、9まで来ると次の位が1つ増えます。
  (例)9→10(2桁目が1になる)
  つまり、○○進数の○○の部分の数で繰り上がります。
  2進数では、2で繰り上がる
  (例)1→10(2桁目が1になる)
  10進数の2を2進数で表すと10となる
・符号付き2進数について
  実はこの2進数にも符号付きと符号無しがあります。

                                                                                                       
符号なし 2 進数符号つき 2 進数
2 進数 10 進数  2 進数  10 進数 
00000000  0 00000000 
00000001 00000001
00000010 00000010
省略 省略
01111101 125  01111101125 
01111110 126  01111110126 
01111111127  01111111127 
10000000128  10000000-128 
10000001129  10000001-127 
10000010130  10000010-126 
省略省略
11111101 253  11111101-3 
11111110254  11111110-2 
11111111255  11111111-1 

上記の図のように符号付きの場合、最上位の位が0か1で符号が変わる。
(最上位の位がマイナスを表しているが他の位はプラスになるので注意)
なので、符号無しでは0~256の数字が表せて、符号ありでは-128~127が表せます。

シフト演算

 シフト演算には2種類あります。
  ・論理シフト(符号なし)
  ・算術シフト(符号あり)

論理シフト

符号なしについて行うときに使う
 2進数を「左or右」ずらしたビット数をnとすると、シフト後の数を「左(2ⁿ倍)or右(1/2ⁿ倍)」したものになる。

上記の図は元の数を2のn乗に当てはまる
(右(1/2ⁿ倍)は逆になります。)

算術シフト

符号ありについて行うときに使う。
2進数を「左or右」にN個算術シフトすると使いN個「左(2ⁿ倍)or右(1/2ⁿ倍)」にずらすことをいう。
※基本的には論理シフトと同じだが、右にずらした場合は空いたビットは符号ビットで埋めないといけない

以上