2の補数の求め方(全ビット反転して1を足す・2のn乗から引く・右から最初の1まで写す)を、−5と−12の例で検算つきに解説。8ビットで−128〜127を表せる理由と、基本情報技術者試験の公式問題の解き方も確認できます。
目次
結論:2の補数は、コンピュータが負の整数を表す方法です。n ビットなら、負の数 −x は「2ⁿ − x」を2進数にした値で表します。求め方は3通りあり、いちばん使う方法は「元の数のビットを全部反転して1を足す」です(−5 は 00000101 → 11111010 → 11111011)。8ビットで表せる範囲は −128〜127で、先頭のビットが1なら負の数です。当サイトに収録している基本情報技術者試験の問題では、この求め方と、負の数を2の補数で読む考え方を使って解く形で補数が出ています。
合格ナビに収録している基本情報技術者試験の問題520問(IPAが公表した平成21年度〜令和7年度の問題とサンプル問題)のうち、問題文に「2の補数」と明記されている問題は2問(サンプル問題 問1、平成24年度 秋期 問1)です。ITパスポート試験の600問(令和3〜8年度)には、補数を問う問題はありません。2進数の表現や変換、加算を扱う問題は3問あります(2026-10-04 当サイト集計。試験全体での出題頻度ではありません)。
| 8ビットの例 | 10進数 | 2進数(2の補数) | 16進数 |
|---|---|---|---|
| 最大の正の数 | 127 | 01111111 | 7F |
| 5 | 5 | 00000101 | 05 |
| −5 | −5 | 11111011 | FB |
| −12 | −12 | 11110100 | F4 |
| 最小の負の数 | −128 | 10000000 | 80 |
IPAの基本情報技術者試験シラバス Ver.9.2は、「数値の表現」に「負の数の表現(補数表現),小数の表現を理解する。」と書き、「基数」に「2進数,8進数,10進数,16進数,n進数の表現,2進数と10進数などの基数の変換手法を理解する。」と書いています(IPA 基本情報技術者試験 シラバス Ver.9.2 大分類1 中分類1「基礎理論」の1.離散数学)。
2の補数とは:負の整数を表す方法
コンピュータは、ビットの並びしか扱えません。マイナス記号を書けないので、「このビット列は負の数」と約束して表す方法が必要です。その約束の1つが2の補数で、次の2つの特徴があります。
- 先頭のビットを符号ビットとして使う(0なら0以上、1なら負)
- 負の数 −x を、nビットでは「2ⁿ − x」の2進数で表す(8ビットなら 256 − x)
たとえば −5 は 256 − 5 = 251 で、251 を2進数にすると 11111011 です。符号なしの整数として読めば 251 のビット列ですが、2の補数の約束で読めば −5 になります。
この方法が使われる理由は、引き算を足し算でできるからです。5 − 3 を 5 + (−3) として足し算の回路で計算できるので、回路が簡単になります(具体的な計算は後半で確かめます)。
この論点の過去問を解く
2の補数の求め方3通り(−5 と −12 で確かめる)
求め方は3つあります。どれも同じ結果になるので、自分の得意な方法を1つ決め、残りは検算に使うと確実です。
| 方法 | 手順 | −5(8ビット)の場合 |
|---|---|---|
| ① 反転して1を足す | 絶対値を2進数にし、全ビットを反転し、最後に1を足す | 00000101 → 11111010 → 11111011 |
| ② 2ⁿ から引く | 2ⁿ(8ビットなら 256)から絶対値を引き、結果を2進数にする | 256 − 5 = 251 = 11111011 |
| ③ 右から最初の1まで写す | 絶対値の2進数を右から見て、最初に出てくる1まではそのまま写し、それより左のビットだけ反転する | 0000010|1 → 1111101|1 → 11111011 |
方法① 反転して1を足す(いちばん使う方法)
−12 で手順を追います。
- ① 絶対値 12 を8ビットの2進数にする:00001100
- ② 全ビットを反転する:11110011
- ③ 1を足す:11110011 + 1 = 11110100
方法② 2ⁿ から引く
256 − 12 = 244。244 = 128 + 64 + 32 + 16 + 4 なので 11110100 で、方法①と一致します(16進数では F4)。
方法③ 右から最初の1まで写す
12 は 00001100 です。右から見ると、0、0、1と並び、最初の1は右から3番目です。そこまで(100)をそのまま写し、左の5ビット(00001)を反転して 11110 にします。つなげると 11110100 で、①②と一致しました。
方法③は、反転して1を足すときに起こる「繰り上がり」を、先に処理した形です。右端の0が続く部分は、反転で1になり、1を足すと繰り上がって元の0に戻ります。繰り上がりが止まるのは最初の1の位置なので、そこまでが元と同じになります。
検算:2の補数から10進数に戻す
11110100 を10進数に戻して、−12 になることを確かめます。
- 戻し方A(もう一度、反転して1を足す):11110100 → 反転 00001011 → 1を足す 00001100 = 12。符号は負なので −12
- 戻し方B(位の重みで読む):先頭のビットの重みを −128 として読む。−128 + 64 + 32 + 16 + 4 = −12
重みで読む方法Bは、1回で10進数がわかるので試験で便利です。−5(11111011)なら −128 + 64 + 32 + 16 + 8 + 2 + 1 = −5、−128(10000000)なら先頭の −128 だけです。
当サイトでは、−1・−5・−12・−64・−100 の5つの値を3つの方法で計算し、すべて同じビット列になることを Python で確かめました(2026-10-04)。
この論点の過去問を解く
2の補数で表せる範囲:8ビットは −128〜127
nビットの2の補数で表せる範囲は、−2ⁿ⁻¹ 〜 2ⁿ⁻¹ − 1 です。
| ビット数 | 表せる負の数の最小 | 表せる正の数の最大 | 全部で何通りか | 符号なしの範囲 |
|---|---|---|---|---|
| 4 | −8 | 7 | 16 | 0〜15 |
| 8 | −128 | 127 | 256 | 0〜255 |
| 16 | −32,768 | 32,767 | 65,536 | 0〜65,535 |
8ビットのビット列は 2⁸ = 256通りあり、先頭が0のもの(00000000〜01111111)は0〜127、先頭が1のもの(10000000〜11111111)は −128〜−1 になります。0が正の側に含まれるので、正の最大は 127、負の最小は −128 と、負の側が1つ多くなります。
−128 だけ、符号を逆にできない
10000000(−128)に「反転して1を足す」を行うと、01111111 + 1 = 10000000 となり、元に戻ってしまいます。+128 は8ビットでは表せないからです。同じように、127 + 1 を8ビットで計算すると 10000000 になり、結果は −128 と読まれます(桁あふれ。オーバーフローとも呼ばれます)。
1の補数との違い
1の補数は、ビットを反転しただけの形です。8ビットでは 00000000 も 11111111 も0を表すので、0が2通りでき、範囲は −127〜127 です。2の補数は反転のあとに1を足すので、0は1通りで範囲が1つ広くなります。
引き算を足し算でする:2の補数の計算例
2の補数を使うと、引き算を足し算で計算できます。8ビットで確かめます。
5 − 3 を 5 + (−3) で計算する
- −3 の2の補数:00000011 → 反転 11111100 → 1を足す 11111101
- 00000101 + 11111101 = 1 00000010
- 9ビット目に出た1(桁あふれ)を捨てると 00000010 = 2
3 − 5 を 3 + (−5) で計算する
- −5 は 11111011
- 00000011 + 11111011 = 11111110(桁あふれなし)
- 先頭が1なので負の数。重みで読むと −128 + 64 + 32 + 16 + 8 + 4 + 2 = −2
検算は、10進数の計算(5 − 3 = 2、3 − 5 = −2)と一致していることです。桁あふれした1を捨てるだけで、符号を特別に扱わなくても正しい結果が出ています。
この論点の過去問を解く
IPAの公式問題で確認する①:−n を求める式(2022年 サンプル問題 問1)
問題(逐語引用)
問1 負数を2の補数で表すとき,8ビットの2進正数nに対し−nを求める式はどれか。ここで,+は加算を表し,ORはビットごとの論理和,XORはビットごとの排他的論理和を表す。
ア (n OR 10000000) + 00000001
イ (n OR 11111110) + 11111111
ウ (n XOR 10000000) + 11111111
エ (n XOR 11111111) + 00000001
出典:基本情報技術者試験 科目A サンプル問題 問1(独立行政法人情報処理推進機構)。
IPAの問題PDFと解答例PDFに、問題文と選択肢、正解がエであることが載っています。
- 「反転して1を足す」を式にすると、反転は「11111111 との XOR」(XOR は、相手が1のビットを反転させる)、1を足すは「+ 00000001」です。これはエそのものです
- 検算(n = 00000101(5)で各選択肢を計算):エは 00000101 XOR 11111111 = 11111010、+ 1 = 11111011 で −5 になります。アは 10000101 + 1 = 10000110(−122)、イは 11111111 + 11111111 = 1 11111110 → 11111110(−2)、ウは 10000101 + 11111111 = 1 10000100 → 10000100(−124)で、どれも −5 になりません
- 当サイトでは、n = 1〜127 のすべての値で4つの選択肢を計算し、すべての値で −n が得られるのはエだけであることも確かめました
IPAの公式問題で確認する②:算術シフトと補数(平成24年度 秋期 問1)
問題(逐語引用)
問1 8 ビットの2 進数11010000 を右に2 ビット算術シフトしたものを,00010100 から減じた値はどれか。ここで,負の数は2 の補数表現によるものとする。
ア 00001000 イ 00011111 ウ 00100000 エ 11100000
出典:平成24年度 秋期 基本情報技術者試験 午前 問1(独立行政法人情報処理推進機構)。
IPAの問題PDFと解答例PDFに、問題文と選択肢、正解がウであることが載っています。
手順① 11010000 を10進数にする
先頭が1なので負の数です。重みで読むと −128 + 64 + 16 = −48。
手順② 算術シフトする
算術シフトは、符号ビットを保ったまま右へずらします。右に2ビットずらし、左側に符号ビット(1)を補うと 11110100 です。重みで読むと −128 + 64 + 32 + 16 + 4 = −12。検算は −48 ÷ 4 = −12 で、右に2ビット算術シフトすることは4で割ることに当たるので一致します。
手順③ 00010100 から減じる
00010100 は 16 + 4 = 20 です。20 − (−12) = 32。32 を8ビットにすると 00100000 で、これはウです。
ほかの選択肢が出る間違い方
- 符号ビットを補わず、0を入れて右にずらす(論理シフト)と 00110100(52)になり、20 − 52 = −32 = 11100000 でエになります
- 引き算を足し算にしてしまうと、20 + (−12) = 8 = 00001000 でアになります
基数変換のやり方:2進数・10進数・16進数を行き来する
2の補数を読むには、2進数と10進数、16進数の変換が欠かせません。基本は「2進数の4桁が16進数の1桁」「10進数からは基数で割って余りを下から並べる」「10進数へは各桁に重みを掛けて足す」の3つで、たとえば 1111 1011 = FB = 15 × 16 + 11 = 251 です(FB は −5 の2の補数 11111011 にあたります)。
変換の手順、小数の変換、2進数の足し算、令和5年度 科目A 問1(16進小数)と令和6年度 科目B 問2の解き方は、16進数と基数変換の記事にまとめています。
ITパスポート試験の基数の問題
- RGBの各色を3桁の2進数で表すときの混色の数(ITパスポート 令和3年度 問66)
- 符号なし2進数を表す文字列を整数に変換する擬似言語(ITパスポート 令和6年度 問85)
- 2桁の2進数の加算を表計算で行う(ITパスポート 令和8年度 問74)
この論点の過去問を解く(基本情報)
2の補数の問題で間違えやすい点
- ① 符号ビットだけ反転して終わりにする:−5 を「5 の先頭を1にした 10000101」としてしまう間違いです。2の補数では、全ビットを反転して1を足します
- ② 1を足し忘れる:反転しただけの 11111010 は、2の補数では −6 です(1の補数なら −5)。重みで読むと −128 + 64 + 32 + 16 + 8 + 2 = −6
- ③ 先頭が1のビット列を、そのまま10進数にする:11111011 は符号なしなら 251 ですが、2の補数で読むなら −5 です。問題文の約束を先に確認します
- ④ 算術シフトと論理シフトの混同:右シフトで左端に補うのは、算術シフトでは符号ビット、論理シフトでは0です。平成24年度 秋期 問1 では、この違いが選択肢のエに出てきます
- ⑤ 範囲の端の取り違え:8ビットの負の側は −128 までで、正の側は 127 までです。「−127〜128」ではありません
この論点の過去問を解く
- 8ビットの正の数 n から −n を求める式(基本情報 2022 サンプル問題 問1)
- 算術シフトした値を引く問題(負の数は2の補数表現)(基本情報 平成24年度 秋期 問1)
- 8ビットの値の全ビットを反転する操作(基本情報 令和元年度 秋期 問2)
まとめ
- 2の補数は、nビットの負の数 −x を「2ⁿ − x」の2進数で表す方法。先頭のビットが1なら負の数
- 求め方は3通り。①全ビットを反転して1を足す、②2ⁿ から引く、③右から最初の1まで写して左を反転する。検算は「重みで読む」(先頭の重みを −2ⁿ⁻¹ として足す)
- 8ビットの範囲は −128〜127。−128 だけは、反転して1を足しても元に戻る
- 引き算は、引く数の2の補数を足して、あふれた桁を捨てれば計算できる
- 基本情報の公式問題では、「反転して1を足す」を式にする問題と、算術シフトと補数をあわせた問題を取り上げた。同じ視点で、浮動小数点数の表し方は浮動小数点数をわかりやすくで扱っている
よくある質問
Q2の補数で「反転して1を足す」と負の数になるのはなぜですか?
8ビットでは、ビットを全部反転した値と元の値を足すとすべて1(11111111、10進数で255)になります。ここに1を足すと桁があふれて、下位8ビットは00000000になります。つまり「元の値 + 反転して1を足した値 = 0」なので、反転して1を足した値は元の値のマイナスにあたります。たとえば 00000101(5)を反転して1を足すと 11111011 で、00000101 + 11111011 = 1 00000000 となり、あふれた1を捨てると0です。
Q先頭のビットが1なら必ず負の数ですか?
2の補数で表した整数として読むときは、先頭のビット(符号ビット)が1なら負の数、0なら0以上の数です。ただし、符号なしの整数として読むなら、11111011 は 251 という正の数です。同じビット列でも、どちらの約束で読むかは問題文で決まります。基本情報技術者試験の問題でも「負の数は2の補数表現によるものとする」のように約束が書かれます。
Q1の補数と2の補数は何が違いますか?
1の補数は、ビットを全部反転しただけの形で負の数を表します。この方法だと 00000000 と 11111111 のどちらも0になり、0が2通りできてしまいます(8ビットで表せる範囲は −127〜127)。2の補数は反転したあとに1を足すので、0は00000000の1通りだけになり、範囲は −128〜127 と1つ広くなります。基本情報技術者試験のシラバスは「負の数の表現(補数表現)」と書いています。当サイトの収録問題で補数が出てくる2問は、どちらも2の補数です。
QITパスポート試験に2の補数は出ますか?
ITパスポート試験のシラバス Ver.6.5 は「2進数の表現,基数変換の方法,2進数の加算や減算,表現可能な数値の範囲などの考え方」を挙げていますが、補数という語は記載されていません。当サイトに収録しているITパスポート試験の600問(令和3〜8年度)にも、補数を問う問題はありません(2026-10-04 当サイト集計)。補数表現は基本情報技術者試験のシラバスから出てくる内容です。
法令や試験の数字は、改正や年度で変わります。この記事の最終確認日は2026年10月4日です。申込みや合格基準は、必ず試験団体の公式情報で確かめてください。

