最終更新日:2026年9月9日
fe fe-technology binary computer-architecture
まず結論
2の補数は、コンピュータで負の整数を表す代表的な方法です。
正の数から負の数を作るときは、
全ビットを反転
↓
1を加える
という手順を使います。
そして2の補数表現では、負数から絶対値を求めるときも同じく、
全ビットを反転
↓
1を加える
で求められます。
また、nビットの2の補数で表現できる整数の範囲は、
-2^(n-1) ~ 2^(n-1)-1
です。
基本情報技術者試験では、
2の補数
→ 反転+1
→ nビットの範囲は -2^(n-1) ~ 2^(n-1)-1
を判断できることが重要です。
直感的な説明
8ビットで正の数を考えてみます。
例えば、
00110110
を負の数にしたいとします。
まず全ビットを反転します。
00110110
↓
11001001
次に1を加えます。
11001001
+ 1
--------
11001010
これが元の正数に対応する負数の2の補数表現です。
2の補数の便利な点は、同じ操作をもう一度行うと元のビット列に戻ることです。
11001010
↓ 反転
00110101
↓ +1
00110110
そのため、
正数 → 負数
負数 → 絶対値
のどちらでも同じ操作を使えます。
定義・仕組み
2の補数とは?
nビットの2の補数表現では、負数を
ビット反転
+
1
で表します。
例えば、8ビットで 42 を表すと、
00101010
です。
これを負の -42 にするには、
00101010
↓ 反転
11010101
↓ +1
11010110
となります。
先頭ビットで符号を見る
2の補数表現では、最上位ビットを見ると符号を判断できます。
先頭が0
→ 0以上
先頭が1
→ 負数
例えば、
01010110
→ 正の数
10101010
→ 負数
です。
nビットで表現できる範囲
nビットの2の補数で表現できる整数の範囲は、
最小値:-2^(n-1)
最大値: 2^(n-1)-1
です。
例えば8ビットなら、
-128 ~ 127
16ビットなら、
-32768 ~ 32767
となります。
ここで大切なのは、負の数の範囲が正の数より1つ広いことです。
8ビットの場合は全部で256通りあり、
0 ~ 127
→ 128通り
-128 ~ -1
→ 128通り
に分かれます。
そのため、最大値は 2^(n-1) ではなく、2^(n-1)-1 になります。
FEでは、
nビットの2の補数
→ -2^(n-1) ~ 2^(n-1)-1
と判断できれば十分です。
なお、「小数点の位置が最下位ビットの右」と指定されている場合は、小数部がないため、通常の符号付き整数としてこの範囲を考えます。
なぜ反転して1を足す?
2の補数表現では、nビットの範囲で
正の値
+
対応する負の値
=
2^n
となるように表現します。
その結果、通常の2進数の加算回路をそのまま使って、正負の加減算を扱いやすくなります。
FEでは、仕組みを深く追うより、
2の補数
→ 反転+1
を使えることを優先して覚えるとよいです。
科目Aでどう出る?
科目Aでは、2の補数で表された負数から絶対値を求めたり、ある正数の負数表現を選んだりする問題が出ます。
また、nビットで表現できる値の範囲を問われることもあります。
例えば、
11010100
が8ビットの2の補数で表された負数だとします。
① 全ビットを反転する
11010100
↓
00101011
② 1を加える
00101011
+ 1
--------
00101100
したがって、絶対値は、
00101100
です。
試験中の判断手順
負数の値を求める問題なら、
先頭ビットを見る
↓
1なら負数
↓
全ビット反転
↓
1を加える
↓
絶対値
とすると安定します。
表現範囲を問われた場合は、
nビット
↓
最小値 -2^(n-1)
最大値 2^(n-1)-1
と判断します。
どんな場面で使う?
2の補数は、コンピュータ内部で符号付き整数を扱うときに使われます。
例えば、
- CPUの整数演算
- 符号付き整数型
- 加算・減算処理
- オーバーフロー判定
などです。
コンピュータでは、正数と負数で別々の加算回路を用意するより、同じ回路で処理できる方が都合がよいため、2の補数が広く使われています。
よくある誤解・混同
1の補数と2の補数は同じ?
違います。
1の補数
→ 全ビット反転
2の補数
→ 全ビット反転+1
です。
この「+1」を忘れるのが典型的なミスです。
先頭ビットを反転するだけでよい?
違います。
2の補数では、すべてのビットを反転してから1を加えます。
10110010
↓
01001101
↓ +1
01001110
です。
負数の絶対値を求めるときも反転+1?
はい。
2の補数では、
正数
↓ 反転+1
負数
負数
↓ 反転+1
絶対値
と同じ操作を使えます。
nビットなら最大値は2^(n-1)?
違います。
最大値は、
2^(n-1)-1
です。
一方、最小値は、
-2^(n-1)
です。
2の補数では0も正側に含まれるため、正負の範囲は完全な対称にはなりません。
先頭が1なら、そのまま正の2進数として読めばよい?
違います。
2の補数表現で先頭が1なら負数です。
その値の大きさを知りたい場合は、
反転+1
で絶対値を求めます。
反転+1を2回するとどうなる?
元のビット列に戻ります。
これは2の補数の重要な性質です。
元の値
↓ 反転+1
符号反転
↓ もう一度反転+1
元の値
確認問題(基本情報技術者試験対策)
8ビットの2の補数で表された負数
11001101
の絶対値はどれか。
- ア. 00110001
- イ. 00110010
- ウ. 00110011
- エ. 00110100
▶ クリックして答えと解説を見る(ここを開く)
正解:ウ
まず全ビットを反転します。
11001101
↓
00110010
次に1を加えます。
00110010
+ 1
--------
00110011
したがって、絶対値は 00110011 です。
まとめ(試験直前用)
- 2の補数は負数を表す代表的な方法
- 2の補数 → 全ビット反転+1
- 先頭ビットが0なら0以上、1なら負数
- nビットの範囲は
-2^(n-1) ~ 2^(n-1)-1 - 8ビットなら
-128 ~ 127 - 負数の絶対値を求めるときも反転+1
- 1の補数は反転だけ
- 2の補数は反転+1
- 反転+1を2回行うと元のビット列に戻る
- 試験では「先頭1 → 反転 → +1」と「nビット → 最小値・最大値」を切り分ける