「足し算引き算なんて余裕でしょ」と思って過去問を開いたら、2進数やシフト演算が出てきて固まった経験はありませんか?基本情報技術者試験の算術演算は、”学校の算数”とは少し世界が違います。コンピュータが2進数でどのように四則演算を行うかを理解すると、試験の計算問題が見違えるように解けるようになります。
この記事では、2進数による加算・減算・乗算・除算の仕組みから、シフト演算・オーバーフロー・丸め誤差まで、基本情報の算術演算をすべて丁寧に解説します。
- 2進数で加算・減算・乗算・除算がどう行われるかがわかる
- 2の補数による減算の仕組みが理解できる
- シフト演算(左・右)の意味と使いどころが身につく
- オーバーフロー・丸め誤差の試験頻出パターンを把握できる
基本情報の算術演算:2進数による四則演算の仕組みを完全解説

2進数の加算のルールと桁上がりの仕組み
コンピュータは0と1だけの2進数で動いています。そのため、四則演算もすべて2進数のルールで行われます。まず最も基本の2進数の加算(足し算)から理解しましょう。
2進数の足し算のルールは非常にシンプルです。「1+1になったら繰り上がる」この1点だけ覚えればOKです。
| 計算 | 結果 | 説明 |
|---|---|---|
| 0 + 0 | 0 | 変化なし |
| 0 + 1 | 1 | 1増える |
| 1 + 0 | 1 | 1増える |
| 1 + 1 | 10(桁上がり) | 2進数に「2」はないため繰り上がり |
例:3 + 5 を2進数で計算する
3 = 011₂、5 = 101₂
| 桁3 | 桁2 | 桁1 | |
|---|---|---|---|
| 3(011) | 0 | 1 | 1 |
| 5(101) | 1 | 0 | 1 |
| 繰り上がり | 1 | 1 | 0 |
| 結果(1000) | 1 | 0 | 0 |
1000₂ = 8₁₀ となり、3+5=8 が正しく計算できています。やっていることは10進数の筆算と全く同じで「1+1のときだけ繰り上がる」というルールが違うだけです。
2進数の減算は2の補数で足し算に変換する
コンピュータは「引き算専用の回路」を持っていません。その代わりに減算を加算に変換して計算します。このとき使うのが「2の補数」という表現です。
「5 − 3」を計算するとき、コンピュータは「5 + (−3)」に変換します。「−3」を2の補数で表すと、普通の加算と全く同じ回路で引き算ができます。
3 = 00000011(8ビット)
00000011 → 11111100(1の補数)
11111100 + 1 = 11111101(これが −3 の表現)
00000101 + 11111101 = 00000010(= 2)。正しく 5−3=2 が計算できた!
乗算を高速化するシフト演算(左シフト)の仕組み
掛け算は本質的に「同じ数の足し算の繰り返し」です。ただし3×100をするために同じ数を100回足すのは非効率です。コンピュータはシフト演算を使って乗算を高速に処理します。
2進数を左に1ビットずらす(左シフト)と、値が2倍になります。
| 元の値 | 2進数 | 左1ビットシフト | 結果 |
|---|---|---|---|
| 1 | 0001 | 0010 | 2(2倍) |
| 3 | 0011 | 0110 | 6(2倍) |
| 5 | 0101 | 1010 | 10(2倍) |
左に2ビットシフトすると4倍、3ビットシフトすると8倍になります。つまり「左にnビットシフト = ×2ⁿ」です。10進数で「左に桁をずらすと10倍になる」のと同じ感覚です。
除算は右シフトで÷2・÷4を実現する
割り算はシフトの逆で、右にビットをずらす(右シフト)と値が2分の1になります。「右にnビットシフト = ÷2ⁿ」です。
| 元の値 | 2進数 | 右1ビットシフト | 結果 |
|---|---|---|---|
| 8 | 1000 | 0100 | 4(÷2) |
| 6 | 0110 | 0011 | 3(÷2) |
| 5 | 0101 | 0010 | 2(÷2・小数点以下切り捨て) |
右シフトは整数の除算なので、奇数を右シフトすると小数点以下が切り捨てられます。5÷2は「2.5」ですが、右シフトの結果は「2」になります。これは試験でも問われるポイントです。
正の数を右シフトした場合は左端に「0」が入ります(論理シフト)。負の数(符号付き整数)の右シフトでは、左端に「符号ビット(1)」が入る場合があります(算術シフト)。試験では「符号ありの右シフト」が問われることがあるので注意してください。
オーバーフロー(桁あふれ)の仕組みと表現範囲
コンピュータで扱う数値は「何ビットで表すか」が決まっており、表せる数値には上限と下限があります。計算結果がこの範囲を超えることをオーバーフロー(桁あふれ)と言います。
| ビット数 | 符号なし(0以上)の範囲 | 符号あり(正負あり)の範囲 |
|---|---|---|
| 8ビット | 0〜255(2⁸-1) | −128〜+127 |
| 16ビット | 0〜65535(2¹⁶-1) | −32768〜+32767 |
| 32ビット | 0〜4294967295(2³²-1) | 約±21億 |
8ビット符号あり整数で「127 + 1」を計算すると、結果は「−128」になります(ぐるっと一周する現象)。逆に「−128 − 1」は「+127」になります。これがオーバーフローです。
基本情報試験で算術演算を確実に得点するための対策

論理シフトと算術シフトの違いを理解する
シフト演算には「論理シフト」と「算術シフト」の2種類があります。この違いが試験でよく問われます。
| 種類 | 空いたビットの扱い | 用途 |
|---|---|---|
| 論理シフト(左) | 右端に0を補う | 符号なし数値の乗算 |
| 論理シフト(右) | 左端に0を補う | 符号なし数値の除算 |
| 算術シフト(右) | 左端に符号ビット(最上位ビット)と同じ値を補う | 符号あり数値の除算(符号を保持する) |
算術シフトでは符号ビットが保持されるのが最大のポイントです。負の数(最上位ビット=1)を右に算術シフトすると左端に「1」が補われるため、マイナスの符号が維持されます。
例:−8(符号あり8ビット = 11111000)を右に算術シフト1ビット → 11111100(=−4)
丸め誤差・桁落ち・情報落ちの正しい理解
算術演算の精度に関する問題も試験でよく出ます。特に浮動小数点数の計算では避けられない誤差が生じます。
| 現象 | 原因 | 例 |
|---|---|---|
| 丸め誤差 | 2進数では正確に表せない小数が存在する | 0.1 + 0.2 ≠ 0.3(0.30000000000000004になる) |
| 桁落ち | 近い値の数値の引き算で有効桁数が激減する | 1.23456 − 1.23455 → 上位桁が消えて精度激減 |
| 情報落ち | 絶対値の差が大きすぎる数値の足し算で小さい数が無視される | 1000000 + 0.001 → 0.001が消える |
| オーバーフロー | 計算結果が表現可能な最大値を超える | 8ビット符号あり:127+1 = −128 |
これらの誤差は浮動小数点数の特性として避けられないものです。プログラミングでは「整数で扱う」「一定桁で丸める」「誤差範囲で比較する」などの対策が取られます。試験では「なぜ誤差が生じるか」という理由の理解が問われます。
試験頻出の算術演算パターンと解き方のコツ
基本情報の科目Aで算術演算が出題されるときのパターンはほぼ決まっています。以下のパターンを繰り返し練習しておきましょう。
- 2進数の加算問題:2進数同士を筆算で足す(桁上がりの連鎖に注意)
- 2の補数による負の数:「○○の2の補数を8ビットで表せ」→ 反転+1の手順で計算
- シフト演算の結果:「○○を左に2ビットシフトした結果は?」→ ×4を計算
- オーバーフローの判定:「次の計算でオーバーフローが起きるのはどれか」→ 結果の符号が変わる組み合わせを選ぶ
- 表現範囲の問題:「nビット符号あり整数の最大値は?」→ 2ⁿ⁻¹−1を計算
過去問で繰り返し出る計算問題の攻略法
算術演算は「仕組みを理解する」だけでなく「手を動かして計算する」訓練が必要です。過去問を解くときは以下のポイントを意識してください。
基本情報の計算問題全般の攻略法については計算問題はコツで攻略!苦手克服ガイドも参考にしてください。
| 攻略のポイント | 具体的な取り組み方 |
|---|---|
| 電卓を使わない | 試験会場では電卓持ち込み禁止。メモ用紙への手計算で慣れておく |
| 手順を型にする | 「補数を求める3ステップ」など型通りに計算する習慣をつける |
| ビット数を確認 | 問題文に「8ビット」「16ビット」が書いてあれば必ず確認する |
| 過去問を5年分解く | 算術演算の出題パターンは繰り返すため5年分で十分対策できる |
まとめ:算術演算の学習順序と最短攻略ルート
基本情報の算術演算は、学ぶべき内容が体系的につながっています。以下の順序で学ぶと効率よくマスターできます。
- まずn進数(2進数変換)を完璧に理解する(土台)
- 次に2進数の加算(1+1=10のルール)を5問練習する
- 2の補数の求め方(反転+1)を3回繰り返して手順を定着させる
- 左シフト=×2・右シフト=÷2の感覚を掴む
- オーバーフローの判定方法(符号が変わる)を確認する
- シフト演算と乗除算の関係は試験に出ますか?
はい、頻出です。「○○を左に2ビットシフトした結果はどれか」という形式や、「左シフトはどのような演算と同等か」という形式で出題されます。「左シフト = ×2ⁿ」「右シフト = ÷2ⁿ(切り捨て)」という関係を確実に覚えておきましょう。
- オーバーフローと桁落ちは何が違いますか?
オーバーフローは「整数演算で結果がビット数の表現範囲を超える現象」です。桁落ちは「浮動小数点演算で近い値の引き算をしたとき、有効桁数が激減する現象」です。対象が違います(整数vs浮動小数点)し、原因も異なります。どちらも試験に出るので両方理解しておきましょう。
- 算術演算は科目Aと科目Bのどちらで出ますか?
主に科目A(旧午前)で出題されます。「n進数の加算」「2の補数による減算」「シフト演算の結果」「オーバーフローの判定」などは科目Aの計算問題として定期的に出題されます。科目B(旧午後)では疑似言語の問題の中で計算が登場することがありますが、単体での算術演算問題は科目Aが中心です。


コメント