前回、基数変換を整理しました。今回はその応用として、コンピュータが内部でよく使う「シフト演算」と「ビット演算」を整理します。
目次
ビットとは何か
コンピュータが扱う最小単位は「ビット」で、0か1のどちらかの値を持ちます。このビットが並んだものが2進数であり、前回学んだ基数変換の考え方がそのまま土台になります。
シフト演算とは
シフト演算は、2進数の桁を左右にずらす操作のことです。
- 左シフト:桁を左にずらす。ずらした桁数分、値は2倍ずつ増える
- 右シフト:桁を左にずらす。ずらした桁数分、値は2分の1ずつ減る
例えば2進数の0011(10進数で3)を左に1ビットシフトすると0110(10進数で6)になります。2倍になっていることが分かります。同じように2ビット左シフトすれば、4倍(12)になります。
つまり、左に1ビットシフトするごとに2倍、右に1ビットシフトするごとに2分の1、という関係を覚えておけば、実際に桁をずらさなくても計算できます。
論理シフトと算術シフト
シフト演算には、大きく2種類あります。
- 論理シフト:空いた桁に単純に0を入れる
- 算術シフト:符号(プラス・マイナス)を保つように、空いた桁の扱いを変える
科目Aでは、この違いを問う問題も出てきます。「符号付きの数を扱うときは算術シフト」という点を意識しておくと、選択肢を絞りやすくなります。
ビット演算(論理演算)との関係
シフト演算と並んで登場するのが、AND・OR・XOR・NOTといったビットごとの論理演算です。シフト演算が「位置をずらす」のに対して、ビット演算は「同じ桁どうしを比較・計算する」という違いがあります。
この2つはセットで出題されることが多いので、次回は論理演算(AND・OR・XOR・NOT)の使い方を詳しく整理します。
学習してみた感想
シフト演算は、最初は「桁をずらすだけで何が起きているのか」がイメージしにくかったのですが、「2倍・2分の1になる」という感覚で捉え直すと、一気に理解しやすくなりました。公式を覚えるより、具体的な数字で何度も試してみるほうが自分には合っているようです。
