論理シフトとは?ろんりしふと
論理シフトとは、ビット列全体を左または右にずらし、空いた桁を符号に関係なく0で埋めるシフト演算。符号ビットを持たない数として扱うため、nビット左にずらすと値は2のn乗倍、右にずらすと2のn乗分の1になる。あふれた桁は捨てられ、空いた側は0になる。2のべき乗の掛け算・割り算を高速に行う手段として使われる。
最終更新:2026-10-09
この語が出る過去問を解く →背景
掛け算と割り算の回路は加算より複雑で時間がかかる。2進数では桁をずらすこと自体が2倍・2分の1に対応するため、2のべき乗の掛け算・割り算はビットをずらすだけで済ませられる。この速さを使うために、値としての意味を持たせず桁を機械的に動かす操作が命令として用意された。符号を考えるかどうかで、論理シフトと算術シフトに分かれている。
具体例
C言語で符号なし整数に1ビットの左シフトを行うと、10進の5は2進で0101から1010に変わり、値は10になる。マスク処理(取り出したい桁だけを1にした値とANDをとり、ほかの桁を0にする処理)と組み合わせて、32ビットの値から特定の位置の8ビットだけを取り出す用途にも使われる。
試験での引っ掛け
算術シフトとの違いが定番の出題になる。算術シフトは符号ビットを保つため、負数を右にずらすと空いた上位桁は1で埋まる。論理シフトを負数に使うと符号が失われ、右シフトで大きな正の数に変わってしまう。
関連用語
出た過去問
出典:平成29年度 春期 基本情報技術者試験 午前 問5(IPA)
次の流れ図は,シフト演算と加算の繰返しによって2進整数の乗算を行う手順を表したものである。この流れ図中のa,bの組合せとして,適切なものはどれか。ここで,乗数と…
正解:a: Yの第0ビット/b: Xを1ビット左シフト,Yを1ビット右シフト
要点:シフト乗算は乗数の最下位を見てXを左・Yを右へずらす
筆算による2進乗算と同じ考え方で、乗数Yの下位ビットから順に見て、その位が1なら被乗数Xを部分積Zに加えます。判定するのは毎回Yの最下位である第0ビットなので、1回のループごとにYを右へ1ビットずらして次の位を最下位に持ってきます。同時に、桁が1つ上がった重みに合わせるためXは左へ1ビットずらします。
出典:令和4年度 公開問題 基本情報技術者試験 科目B 問6(IPA)
次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数revは8ビット型の引数byteを受け取り、ビットの並びを逆にした値を返す。例えば、関数re…
正解:r ← (r << 1) ∨ (rbyte ∧ 00000001) rbyte ← rbyte >> 1
要点:ビット反転は最下位を取り出し結果を左シフトして積む
ビット順を反転させる定石は、元の値から最下位ビットを1つずつ取り出し、結果側では左へ押し込んでいく方法です。rbyte ∧ 00000001 で最下位ビットだけを取り出し、rを1ビット左シフトしてから論理和で下端に加えます。その後 rbyte を1ビット右シフトして次のビットを最下位に持ってくれば、8回の繰返しで並びが逆になります。
出典・参考
公式シラバスの1 基礎理論 > 1. 離散数学 > (3) 算術演算と精度に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。