見出し画像

シフト演算って何?【応用情報技術者試験対策】

シフト演算についてざっくりメモ。


シフト演算とは?

PCが演算で、2^nのような計算をする場合に、シフト(桁を移動)することで高速化するための仕組みで、基本的に2進数で考える。
算術シフトと論理シフトがあり、それぞれ左シフトと右シフトがある。

算術シフト

符号を考慮したシフト演算で、最上位のビットは固定したまま他のビットをシフトする。左、右のシフト例を下記しておく。

例:シフト前:1011 (-5)※1. 10進数
  ・左シフト:1110(-2)
   ・符号ビットを除いた一番左の1はオーバーフローして消える
   ・一番右が1つ空くので0が挿入される
   ・左シフトは符号を考慮しない、する、というサイトがある…。
    (Bingも考慮しない派だけど、実際どっちなんだ…?
     日高哲郎さんの書籍には符号を考慮せよ、とあるので考慮派)
  ・右シフト:1101(-3)
   ・一番右の1はオーバーフローして消える
   ・一番左が1つ空くので符号と同じ1が挿入される
※1.マイナスの数値を出す場合は1111とXORを取って+1と覚えると楽。

論理シフト

符号は考慮されないため、全体をシフトする。
左シフトなら2^n、右シフトなら2^-nされる。
左右のシフト例は下記。

例:シフト前:1011 (11)※1. 10進数
  ・左シフト:0110(6)
   ・一番左の1はオーバーフローして消える
   ・一番右が1つ空くので0が挿入される
  ・右シフト:0101(5)
   ・一番右の1はオーバーフローして消える
   ・一番左が1つ空くので0が挿入される

乗算と除算の具体的な方法

下記サイトが分かりやすかったのでメモ。
2進数化 → 補数チェック → 各桁シフトした結果を加算減算する。


符号の考慮についてはもう少し調べないと。
内容に相違などあればご指摘くださいー。


この記事が気に入ったらサポートをしてみませんか?