基本情報技術者試験対策(76)「擬似言語(37)ビット列(6)8ビット型(論理シフト)」

スポンサーリンク
IT系
Meeting online. Video conference on monitor screen. Workplace with computer, flower pot, lamp front view. Work from home. Vector illustration on a trendy flat style isolated.

論理シフトは、2進数のビット列を左右に移動させる操作である。

論理左シフト(<<)

ビット列を左に移動させる操作である。

動作の特徴

  • 各ビットが左に移動する
  • 左端からあふれたビットは捨てられる
  • 右端には0が補充される

具体例(3ビット左シフト)

元の値:  00000011 (2進数で11、10進数で3)
3ビット左シフト後:
         00011000 (2進数、10進数で24)

右端に「000」が補充された。

重要な性質
論理左シフトを1回行うと、値は2倍になる(オーバーフローしない範囲で)。

  • 3ビット左シフトなら8倍(2³=8)になる
  • 3 << 3 = 24 (3×8=24)

論理右シフト(>>)

ビット列を右に移動させる操作である。

動作の特徴

  • 各ビットが右に移動する
  • 右端からあふれたビットは捨てられる
  • 左端には0が補充される

具体例(2ビット右シフト):

元の値:  00001000 (2進数で1000、10進数で8)
2ビット右シフト後:
         00000010 (2進数、10進数で2)

右端の「00」が捨てられ、左端に「00」が補充された。

重要な性質
論理右シフトを1回行うと、値は2で割った商になる(小数点以下切り捨て)。

  • 2ビット右シフトなら4で割った商(2²=4)になる
  • 8 >> 2 = 2 (8÷4=2)

試験での注意点

  1. 桁あふれ(オーバーフロー)に注意
    左シフトで最上位ビットが失われると、正しい結果が得られない。
  2. シフト回数と演算の関係
    • nビット右シフト = 2ⁿで割る
    • nビット左シフト = 2ⁿで掛ける
  3. 計算問題での活用
    シフト演算を使った高速化の問題がよく出題される。

練習問題
2進数 01100100 を2ビット右シフトすると?

ここをクリックして正解を見る

正解は、「 00011001 (÷4になる。100÷4=25)」です!

論理シフトは、乗除算を高速に行うためのテクニックとしてプログラミングでも実際に使われる重要な操作である。

参考
 情報処理教科書 出るとこだけ!基本情報技術者[科目B]第4版 橋本 祐史 (著) 翔泳社

コメント

タイトルとURLをコピーしました