
結論:違いは「符号ビットを守るかどうか」だけ
論理シフトは「符号を無視して全ビットを機械的にずらす操作」、算術シフトは「符号ビットを守ったまま数値を2倍・1/2倍する計算」。
この分担さえ掴めば、基本情報の計算問題で迷うことはありません。
本記事では仕組み・具体例・練習問題まで3分で押さえられるよう整理しました。
今回は、基本情報技術者試験でほぼ毎年出題される定番用語、「論理シフト」と「算術シフト」の違いを、ビットの動きからやさしく解説していきます。
「負数を右シフトしたとき、空いたビットに0と1のどっちが入るのか分からなくなる」「論理と算術、どっちが0埋めだったか毎回忘れる」——本当にこの2つの相談は多いです。でも、符号ビットの扱いさえ掴めれば、もう試験で迷うことはありません。3分で完了するので、サクッといきましょう。
この記事でわかること
・論理シフトと算術シフトの仕組みと違い
・それぞれの具体例(8ビットのビット列で実演)
・図解で4パターンのビットの動きをひと目で理解
・試験で確実に1点取るための練習問題3問
・実務(フラグ管理・高速な乗除算など)での使われ方
1. 論理シフト(Logical Shift)とは
仕組み
論理シフトとは、ビット列全体を左または右にずらし、空いたビットを常に0で埋める操作です。ずらした結果、端からあふれたビットはそのまま捨てられます。
ポイントは「符号を一切考慮しない」こと。最上位ビットも特別扱いせず、他のビットと同じように動かします。つまり論理シフトは、ビット列を数値ではなくただのデータの並びとして扱う操作です。
具体例
8ビットの 00001101(10進数で13)をイメージしてください。これを左に1ビット論理シフトすると 00011010(26)になり、右に1ビット論理シフトすると 00000110(6、端数は切り捨て)になります。正の数であれば、左シフトは×2、右シフトは÷2に見えますね。
ところが負数では話が変わります。2の補数表現の 11111000(-8)を論理右シフトすると 01111100(+124)。空きビットが0で埋まるため最上位ビットの1が消え、数値としての意味が壊れてしまうのです。ここが後述の算術シフトとの分かれ目になります。
2進数と10進数の変換があやふやな方は、先にこちらの記事で復習しておくとスムーズです。
こちらもCHECK
-

2進数・16進数の変換は暗記不要!コツ2つで解ける【ITパスポート/基本情報】
今回はIPAの情報処理試験で頻出の「2進数と16進数」の変換方法を解説します。 「あー!もう2進数とか16進数とか無理!!」 と、問題を見た瞬間にあきらめていませんか? 英単語のような暗記は不要で、覚 ...
続きを見る
講師視点|論理シフトの誤解と混同ポイント
僕が初学者に説明する時は以下のような伝え方をしています。
ポイント
・ところてん式の押し出し(押し出された分はこぼれ落ち、空いた側には必ず「0」が補充される)
・ベルトコンベアで荷物を1マスずつ横に送る感覚(符号という特別席はなく、全部の荷物が平等に動く)
・10進数の「桁送り」の2進数版(10進で1桁ずらすと×10/÷10、2進で1桁ずらすと×2/÷2)
初学者が混同しやすいのは「論理シフトでも常に2倍・半分になる」という誤解です。正の数ならその通りですが、最上位ビットが1の負数では数値が壊れます。
論理シフトはあくまで「ビット列の操作」であり計算ではない、と強調すると掴みやすくなります。
2. 算術シフト(Arithmetic Shift)とは
仕組み
算術シフトとは、符号ビット(最上位ビット)を固定したまま残りのビットをずらし、数値として正しく2倍・1/2倍にする操作です。
2の補数表現では最上位ビットが「正か負か」を表すため、これを動かすと数値が壊れてしまいます。そこで符号ビットを保持し、右シフトの空きビットは符号ビットと同じ値で埋める——これが算術シフトの本質です。左シフトの場合、空いた最下位ビットは0で埋めます。
具体例
負数 11111000(-8)を右に1ビットずらす場面を考えます。論理シフトのように0で埋めると+124になってしまい、「−8の半分は−4」という計算が成り立ちません。
そこで算術右シフトを実行すると、空いた最上位側が符号ビットと同じ「1」で埋まり、11111100(-4)になります。もう1ビットずらせば 11111110(-2)。負数のまま、正しく1/2倍ずつ計算できるのが算術シフトです。
この説明で出てきた「2の補数」の仕組みが不安な方は、こちらの記事とセットで読むと理解が一気に深まります。
こちらもCHECK
-

【3分で理解】2の補数とは?2進数での負数の扱い方をわかりやすく解説
今回は、基本情報技術者試験でほぼ毎年出題される定番テーマ、「2の補数」と、コンピュータでの負数の表し方を、基礎からやさしく解説していきます。 「補数って言葉からして難しそう」「ビット反転して1足すのは ...
続きを見る
講師視点|「符号を守る」感覚をつかむコツ
僕が初学者に説明する時は以下のような伝え方をしています。
ポイント
・指定席(符号ビット)の乗客はそのまま、自由席の乗客だけが移動する電車のイメージ
・コピーを引き連れて動く「分身」のイメージ(右シフトで空いた席には符号ビットの分身が入る)
初学者が混同しやすいのは「算術右シフトの空きビットは常に1で埋まる」という誤解です。正しくは「符号ビットと同じ値」で埋まるので、正の数なら0、負の数なら1です。「1埋め」ではなく「符号のコピー埋め」と覚えるよう促すと、正負どちらの問題にも対応できるようになります。
3. 論理シフトと算術シフトの違い【図解+比較表】
2つの違いを、8ビットのビット移動図でまず確認しましょう。左右シフト×論理/算術の4パターンを並べると、空きビットの埋め方の違いがひと目で分かります。
表でも整理しておきましょう。
| 項目 | 論理シフト | 算術シフト |
|---|---|---|
| 目的 | ビット列の操作(位置をずらす) | 数値の計算(2のn乗倍・1/2のn乗倍) |
| 符号ビットの扱い | 区別しない(他のビットと一緒に動く) | 固定して保持する |
| 右シフトの空きビット | 常に0で埋める | 符号ビットと同じ値で埋める |
| 使う場面 | フラグ操作・ビットマスク・符号なしデータ | 符号付き整数(2の補数)の乗除算 |
| 注意点 | 負数に使うと数値が壊れる | 左シフトはオーバーフローに注意 |
ポイント
・同じ「シフト」でも、ビット列の操作は論理シフト、符号付きの計算は算術シフト
・論理=0埋め、算術=符号のコピー埋め、と空きビットの埋め方で覚える
・見ているものが違う(論理:ただのビット列 vs 算術:2の補数の数値)
「右シフトの空きが0なら論理シフト、符号ビットと同じなら算術シフト」という見分け方を覚えておくと、応用問題でもブレません。
4. 試験対策|練習問題で確認しよう
以下は、IPA過去問の傾向を踏まえて作成したオリジナルの練習問題です(IPA公式の過去問そのものではありません)。本番形式に慣れるための練習として活用してください。実際の過去問はIPA公式サイトで公開されています。
練習問題①(ITパスポートレベル)
(問題) ビット列を左または右にずらし、空いたビットを常に0で埋める操作はどれか。
ア.算術シフト
イ.ローテート(巡回シフト)
ウ.論理シフト
エ.基数変換
👉 正解:ウ(論理シフト)
解説:「常に0で埋める」がキーワード。算術シフト(ア)は符号ビットを保持する操作、ローテート(イ)はあふれたビットを反対側に戻す操作、基数変換(エ)は2進数⇔10進数のような表現の変換なので、空きビットを0で埋める論理シフトが正解です。
練習問題②(基本情報レベル)
(問題) 負数を2の補数で表現した8ビットのデータ 11110100 を、算術シフトで右に2ビットシフトした結果はどれか。
ア.00111101
イ.11111110
ウ.11010000
エ.11111101
👉 正解:エ(11111101)
解説:11110100は10進数で-12。算術右シフトでは「空いた上位ビットを符号ビットと同じ1で埋める」ため、2ビットシフトで11111101(-3)になります。-12÷4=-3で計算も一致しますね。ア(00111101)は論理右シフトした場合の結果(+61)なので、引っかからないよう注意。イは1ビット余分にずらした-2、ウは左に2ビットずらした-48です。
練習問題③(混同しやすいポイント)
(問題) 次のうち、算術左シフトをnビット行う操作の説明として最も適切なものはどれか。
ア.元の数を2のn乗で割った商を求める
イ.あふれたビットを最下位に戻しながらビット列を巡回させる
ウ.元の数を2のn乗倍した値を求める
エ.全ビットを反転して1を加え、符号を反転させる
👉 正解:ウ
解説:アは算術右シフト、イはローテート、エは2の補数を求める操作の説明です。「左シフト=2のn乗倍」「右シフト=2のn乗分の1」という対応を見たら、算術シフトの計算問題と判断できればOKです。なお算術左シフトでは、符号ビットの隣からあふれが起こると正しい結果にならない(オーバーフロー)点も併せて覚えておきましょう。
5. 実務ではどう使われている?
試験対策だけでなく、現場でも頻繁に登場する操作です。
論理シフトは、フラグ管理やビットマスク処理で日常的に使われます。たとえば通信プロトコルのヘッダから特定のビットフィールドを取り出すとき、C言語なら (data >> 4) & 0x0F のようにシフトとマスクを組み合わせるのが定番です。符号なし整数のかけ算・割り算を高速化する用途もあります。
算術シフトは、符号付き整数の乗除算の高速化と組み合わせて使うのが定番です。コンパイラの最適化機能も、内部的には「×2や÷2を算術シフトに置き換える」仕組みで動いています。プログラマが意識しなくても、低レイヤでは今日も算術シフトが働いているわけです。組込み開発やデバイスドライバの世界では、考え方は昔から変わっていません。
6. まとめ|一言で覚えるポイント
ポイント
・論理シフト=ビット列をずらす操作(空きは常に0埋め)
・算術シフト=符号を守る計算(×2・÷2、右シフトの空きは符号のコピー)
・ビット操作は論理シフト、符号付きの計算は算術シフトで分担
基本情報の試験では、「右シフトの空きビットに何が入るか」さえ押さえておけば確実に1点取れる「サービス問題」です。余力があれば、算術左シフトのオーバーフロー条件(符号ビットと異なる値があふれ込むケース)まで覚えておくと、応用情報レベルの問題にも対応できます。
それではまた!
一人で悩まず、相談しながら合格を目指したい方へ
「独学だと続かない…」「分からない用語を気軽に質問できる人が欲しい…」
そんな方向けに、エンジニア歴20年・現役講師の僕が運営する無料LINEコミュニティを用意しています。資格学習のコツ・勉強法・キャリア相談まで、気軽に質問できる場所です。
▶ ITキャリアラボに参加する(無料)
ITキャリアラボ
-

【無料】ITの悩みを気軽に相談できるコミュニティ・ITキャリアラボ
IT業界を目指すあなたへ|「ITキャリアラボ」無料コミュニティのご案内 「IT業界に転職したいけど、何から始めればいいかわからない…」「資格の勉強が続かない…」「相談できる人がいない…」 そんな不安、 ...
続きを見る