情報処理試験を勉強していると、「コンピュータって0と1しか扱えないのに、マイナスの数はどう表すの?」と疑問に思う瞬間があります。その答えが「補数」です。
対象試験と出題頻度
補数(負の数の表現)は、基本情報技術者・応用情報技術者で出題されるテーマです。
基数変換の知識を前提に、「2の補数をどう求めるか」「なぜ2の補数を使うのか」が問われます。
FEでは科目Aの冒頭数問に配置されることが多く、確実に拾いたい得点源です。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
情報処理試験を勉強していると、「1の補数?2の補数?何が違うの?」と混乱しがちです。
補数(Complement)とは、一言で言うと
「ある数に足すと桁が一つ上がる(または全桁が最大値になる)数のこと。コンピュータでは負の数を表現するために使う」
のことです。
イメージとしては、「時計の逆回し」です。
12時間制の時計で「3時間戻る」操作は、「9時間進める」のと同じ結果になります。
12 − 3 = 9、つまり9は12を基準にした3の補数です。コンピュータも同じ発想で、引き算を「補数の足し算」に置き換えて処理しています。
📊 補数の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Complement(complement=補うもの) |
| 種類 | 1の補数(One’s Complement)、2の補数(Two’s Complement) |
| 最重要ポイント | 現代のコンピュータは「2の補数」で負の数を表現する |
| 求め方 | 全ビットを反転して1を足す |
解説
コンピュータのCPUには「加算器(足し算の回路)」は搭載されていますが、引き算専用の回路は持っていません。
そこで、引き算を「負の数の足し算」に変換して処理する方法が必要になりました。この「負の数」を表現する仕組みが補数です。
1の補数と2の補数の違い
2進数の補数には「1の補数」と「2の補数」の2種類があります。
| 種類 | 求め方 | 特徴 |
|---|---|---|
| 1の補数 | 全ビットを反転するだけ | 0の表現が2つ(+0と-0)存在し、計算時に補正が必要 |
| 2の補数 | 全ビットを反転して1を足す | 0の表現が1つだけ。加算器だけで減算を処理できる |
現代のコンピュータが2の補数を採用している理由は、「加算回路だけで減算を実行できる」点に尽きます。
1の補数では演算結果に補正が必要ですが、2の補数なら桁あふれ(オーバーフロー)を無視するだけで正しい答えが得られます。
2の補数の求め方
ここだけは確実に押さえてください。手順はたった2ステップです。
2の補数を求める手順(8ビットの例)
例:+5 の2の補数(= −5)を求める
① 元の数を2進数で表す
+5 = 0000 0101
② 全ビットを反転する(1の補数)
1111 1010
③ 1を足す(2の補数の完成)
1111 1011 ← これが −5
※ 検算:00000101 + 11111011 = 1,00000000(桁あふれを無視すると00000000 = 0)→ 正しい
▶ 2の補数で表された負数の絶対値を求める(クリックで展開)
逆の操作も同じ手順です。「全ビットを反転して1を足す」をもう一度やれば元の正の数に戻ります。
例:11111011 の絶対値を求める
① 全ビットを反転 → 00000100
② 1を足す → 00000101 = 5
∴ 11111011 は −5
表現できる数の範囲
nビットの2の補数表現で整数を表す場合、範囲は −2n−1 〜 2n−1−1 です。
| ビット数 | 最小値 | 最大値 | 表現できる数の個数 |
|---|---|---|---|
| 4ビット | −8 | +7 | 16通り |
| 8ビット | −128 | +127 | 256通り |
| 16ビット | −32,768 | +32,767 | 65,536通り |
※ 負の方が1つ多い(−128はあるが+128はない)。この非対称は試験のひっかけに使われる。
では、この補数の知識が試験でどのように出題されるか見ていきましょう。
💡 補数の核心を3行で
・2の補数は「全ビットを反転して1を足す」で求める。負数から絶対値に戻す場合も同じ手順
・コンピュータが2の補数を採用する理由は「加算器だけで減算を処理できる」から
・nビットの表現範囲は −2n−1 〜 2n−1−1。負の方が1つ多い点に注意
試験ではこう出る!
補数は、FE・APの離散数学分野で繰り返し出題されている定番テーマです。
出題パターンは大きく3つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE サンプル 科目A 問1 |
8ビットの正数nに対し−nを求める式を選ぶ問題。 | ・XOR演算による全ビット反転+1が正解 ・OR演算との混同がひっかけ |
| FE H20秋期 午前 問3 |
2の補数で表された負数10101110の絶対値を求める問題。 | ・「反転して+1」を実行すれば01010010=82 ・反転だけで止める(1の補数)のひっかけ |
| AP H25秋期 午前 問3 |
1の補数・2の補数・符号付き絶対値の3方式で−18を表現し、一致するものを選ぶ問題。 | ・3つの負数表現方式の違いを正確に区別できるか ・符号ビット(最上位ビット)の扱いの理解 |
📝 IPA試験での出題パターン
パターン1:「2の補数で表された負数の絶対値を求めよ」
最も基本的な出題。与えられたビット列に「反転+1」を適用する計算問題。反転だけで止める(1の補数の値を選ぶ)ひっかけに注意。
パターン2:「−nを求める式(論理演算)を選べ」
FEサンプル問1のように、XOR(排他的論理和)を使った反転操作を式で表現させる形式。「n XOR 11111111 + 1」が2の補数を求める式であることを知っていれば即答できる。
パターン3:「nビットの表現範囲を答えよ」
8ビットなら−128〜+127。負の方が1つ多い非対称な範囲を正確に覚えているかが問われる。「−127〜+127」(1の補数の範囲)を選ばせるひっかけが定番。
試験ではここまででOKです。「反転して+1」の手順と、8ビットの範囲(−128〜+127)を暗記すれば得点できます。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. 2の補数で表された8ビットの負数「11101100」の絶対値として、正しいものはどれでしょうか?
- A. 00010100(10進数で20)
- B. 00010011(10進数で19)
- C. 00011100(10進数で28)
正解と解説を見る
正解:A
解説:
11101100の絶対値を求めるには、全ビットを反転して1を足します。反転すると00010011、そこに1を足すと00010100(10進数で20)になります。つまり11101100は−20を表しています。
選択肢Bの00010011(19)は、ビットを反転しただけで1を足していない状態、つまり1の補数の値です。2の補数の問題で「反転だけ」で止めてしまう典型的な誤りです。選択肢Cの00011100(28)は、元のビット列11101100の下位ビットだけを見て計算した場合の誤答です。
よくある質問(FAQ)
Q. なぜ2の補数では負の方が1つ多いのですか?
0の表現が「00000000」の1通りしかないためです。8ビットなら全体で256通りのビットパターンがあり、0に1通り使うと残りは255通り。正の数(1〜127)に127通り、負の数(−1〜−128)に128通りが割り当てられ、負の方が1つ多くなります。この非対称は2の補数の構造上避けられません。
Q. 最上位ビットが1なら負の数と判断してよいですか?
2の補数表現を使っている場合は、その判断で正しいです。最上位ビット(MSB)が0なら正または0、1なら負です。ただし、これは「符号付き整数」として解釈する場合の話です。「符号なし整数」として扱う場合は最上位ビットが1でも正の値(128〜255)になります。問題文に「負数を2の補数で表す」と記載されているかを必ず確認してください。
Q. オーバーフローとはどういう状態ですか?
演算結果がそのビット数で表現できる範囲を超えた状態です。たとえば8ビットの2の補数表現で、+127に+1を足すと結果は10000000(=−128)になり、符号が反転してしまいます。正の数同士を足して負になる、または負の数同士を足して正になる場合にオーバーフローが発生します。IPA試験ではオーバーフローの検出条件を問う出題もあります。