シフト演算とは
プログラミングをしている際にシフト演算とか出てきたのでそれを理解するための知識
2進数について
2進数とは0と1のみで数字を表したもの
である
普段使っている数は10進数であり、9まで来ると次の位が1つ増える。(=10で繰り上がる)
例)9→10(2桁目が1になる)
つまり、
●●進数の●●の部分の数で繰り上がるということ。
では2進数では、
2で繰り上がる(=1まで来ると次の位が1増える)
10進数の2を2進数で表すと10となる。
10
↑
1つ目の位は1までしか入れないので2となると次の位が繰り上がり1となる
符号付き2進数について
実はこの2進数にも符号付き
と符号無し
がある
(符号つき2進数より)
図のように符号付きの場合、一番高い位が0か1で符号が変わる。
(最上位の位がマイナスを表しているが他の位はプラスなので注意!)
つまり符号無しでは0~256の数字が表せて、符号ありでは-128~127が表せます。
(符号つき2進数より)
10000000→-128になるの?
符号付きの場合最上位の位が1であればマイナス。
今回は8桁のため、 2の8乗で128。
にマイナスをつける。
11111111→-1になるの?
上記より符号付き2進数では10000000=-128
。
最上位以降の位は1111111は全て1なので+127。
(最上位の位がマイナスを表しているが他の位はプラスなので注意!)
-128+127=-1。
いざシフト演算
シフト演算には2種類あります。
- 論理シフト(符号なし)
- 算術シフト(符号付き)
論理シフト
符号無し
について行うときに使う。
2進数を{左or右}にN個論理シフトする
と使いN個{左or右}にずらすことをいう。
↓左に2個論理シフト
(シフト演算より)
これは元の数を2のN乗することに相当。
(右は逆)
算術シフト
符号付き
について行うときに使う。
2進数を{左or右}にN個算術シフトする
と使いN個{左or右}にずらすことをいう。
↓右に2個算術シフト
(シフト演算より)
なるほどです。