さんじゅつしふと
算術シフト
符号付き整数を扱う際に、符号ビットを固定したままビット列を左右にずらす操作です。右シフトは2での除算、左シフトは2での乗算として機能します。
詳しい説明
算術シフトとは、コンピュータ内部で数値を保持するビット列を左右にずらすビット演算の一種です。特に、符号付き整数を扱う際に、符号ビットを保存したまま数値部分のみをシフトさせる点が最大の特徴です。これにより、2のべき乗での乗算や除算を効率的に実行できます。
仕組みとしては、右に算術シフトを行うと、符号ビットはそのまま維持され、空いた左側のビットには符号ビットと同じ値が埋められます。これは数学的に2で割る操作に相当します。逆に左に算術シフトを行うと、右端に0が補完されます。これは数学的に2を掛ける操作に相当しますが、オーバーフローが発生し得る点に注意が必要です。
基本情報技術者試験では、論理シフトとの違いが頻繁に問われます。論理シフトは符号を考慮せずビット列全体をずらすため、負の数を扱う際には算術シフトと挙動が異なります。試験では、具体的なビット列の変化を追わせる問題が出題されるため、符号ビットの位置が変わらないことを常に意識して考える必要があります。
試験で問われること
基本情報技術者試験
- 右シフトが除算、左シフトが乗算に対応することを理解する。
- 論理シフトとの違い、特に符号ビットの扱いを混同しない。
- 負の数を右にシフトした場合の符号拡張を正しく把握する。