基本情報の算術演算を完全解説!加算・減算・シフト演算のしくみとオーバーフロー対策

「足し算引き算なんて余裕でしょ」と思って過去問を開いたら、2進数やシフト演算が出てきて固まった経験はありませんか?基本情報技術者試験の算術演算は、”学校の算数”とは少し世界が違います。コンピュータが2進数でどのように四則演算を行うかを理解すると、試験の計算問題が見違えるように解けるようになります。

この記事では、2進数による加算・減算・乗算・除算の仕組みから、シフト演算・オーバーフロー・丸め誤差まで、基本情報の算術演算をすべて丁寧に解説します。

この記事のポイント
  • 2進数で加算・減算・乗算・除算がどう行われるかがわかる
  • 2の補数による減算の仕組みが理解できる
  • シフト演算(左・右)の意味と使いどころが身につく
  • オーバーフロー・丸め誤差の試験頻出パターンを把握できる
無料

基本情報技術者試験 過去問アプリ

本番形式で繰り返し解ける。スキマ時間に1問から

2,000問以上収録
無料で過去問を解く
目次

基本情報の算術演算:2進数による四則演算の仕組みを完全解説

コンピュータの算術演算

2進数の加算のルールと桁上がりの仕組み

コンピュータは0と1だけの2進数で動いています。そのため、四則演算もすべて2進数のルールで行われます。まず最も基本の2進数の加算(足し算)から理解しましょう。

2進数の基礎(2進数・16進数の変換など)が不安な方は、先にn進数の完全攻略記事を確認してからこのページに戻ることをおすすめします。

2進数の足し算のルールは非常にシンプルです。「1+1になったら繰り上がる」この1点だけ覚えればOKです。

計算結果説明
0 + 00変化なし
0 + 111増える
1 + 011増える
1 + 110(桁上がり)2進数に「2」はないため繰り上がり

例:3 + 5 を2進数で計算する

3 = 011₂、5 = 101₂

 桁3桁2桁1
3(011)011
5(101)101
繰り上がり110
結果(1000)100

1000₂ = 8₁₀ となり、3+5=8 が正しく計算できています。やっていることは10進数の筆算と全く同じで「1+1のときだけ繰り上がる」というルールが違うだけです。

桁上がり(キャリー)が連続して発生することに注意してください。上の例でも桁1で1+1が発生し→桁2で繰り上がり+既存のビットで再びキャリー→桁3まで波及しています。

2進数の減算は2の補数で足し算に変換する

コンピュータは「引き算専用の回路」を持っていません。その代わりに減算を加算に変換して計算します。このとき使うのが「2の補数」という表現です。

「5 − 3」を計算するとき、コンピュータは「5 + (−3)」に変換します。「−3」を2の補数で表すと、普通の加算と全く同じ回路で引き算ができます。

STEP
引く数(3)を2進数で表す

3 = 00000011(8ビット)

STEP
全ビットを反転(0↔1)する

00000011 → 11111100(1の補数)

STEP
1を足す(2の補数の完成)

11111100 + 1 = 11111101(これが −3 の表現)

STEP
5 + (−3) を加算する

00000101 + 11111101 = 00000010(= 2)。正しく 5−3=2 が計算できた!

2の補数の詳細については負の数と小数の表現の解説記事でさらに詳しく説明しています。補数の仕組みと試験での出題パターンも確認してみてください。

乗算を高速化するシフト演算(左シフト)の仕組み

掛け算は本質的に「同じ数の足し算の繰り返し」です。ただし3×100をするために同じ数を100回足すのは非効率です。コンピュータはシフト演算を使って乗算を高速に処理します。

2進数を左に1ビットずらす(左シフト)と、値が2倍になります

元の値2進数左1ビットシフト結果
1000100102(2倍)
3001101106(2倍)
50101101010(2倍)

左に2ビットシフトすると4倍、3ビットシフトすると8倍になります。つまり「左にnビットシフト = ×2ⁿ」です。10進数で「左に桁をずらすと10倍になる」のと同じ感覚です。

たとえば「5 × 8」は「5 ← 3ビット左シフト(×2³=×8)」で計算できます。5(0101)を3ビット左シフトすると 0101000(=40)となり、5×8=40 が求まります。

除算は右シフトで÷2・÷4を実現する

割り算はシフトの逆で、右にビットをずらす(右シフト)と値が2分の1になります。「右にnビットシフト = ÷2ⁿ」です。

元の値2進数右1ビットシフト結果
8100001004(÷2)
6011000113(÷2)
5010100102(÷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が中心です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次