最終更新日:2026年8月14日
fe fe-technology binary computer-architecture
まず結論
2の補数は、コンピュータで負の整数を表す代表的な方法です。
正の数から負の数を作るときは、
全ビットを反転
↓
1を加える
という手順を使います。
そして2の補数表現では、負数から絶対値を求めるときも同じく、
全ビットを反転
↓
1を加える
で求められます。
基本情報技術者試験では、
2の補数
→ 反転+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
→ 負の数
です。
なぜ反転して1を足す?
2の補数表現では、nビットの範囲で
正の値
+
対応する負の値
=
2^n
となるように表現します。
その結果、通常の2進数の加算回路をそのまま使って、正負の加減算を扱いやすくなります。
FEでは、仕組みを深く追うより、
2の補数
→ 反転+1
を使えることを優先して覚えるとよいです。
科目Aでどう出る?
科目Aでは、2の補数で表された負数から絶対値を求めたり、ある正数の負数表現を選んだりする問題が出ます。
例えば、
11010100
が8ビットの2の補数で表された負数だとします。
① 全ビットを反転する
11010100
↓
00101011
② 1を加える
00101011
+ 1
--------
00101100
したがって、絶対値は、
00101100
です。
試験中の判断手順
先頭ビットを見る
↓
1なら負数
↓
全ビット反転
↓
1を加える
↓
絶対値
とすると安定します。
どんな場面で使う?
2の補数は、コンピュータ内部で符号付き整数を扱うときに使われます。
例えば、
- CPUの整数演算
- 符号付き整数型
- 加算・減算処理
- オーバーフロー判定
などです。
コンピュータでは、正数と負数で別々の加算回路を用意するより、同じ回路で処理できる方が都合がよいため、2の補数が広く使われています。
よくある誤解・混同
1の補数と2の補数は同じ?
違います。
1の補数
→ 全ビット反転
2の補数
→ 全ビット反転+1
です。
この「+1」を忘れるのが典型的なミスです。
先頭ビットを反転するだけでよい?
違います。
2の補数では、すべてのビットを反転してから1を加えます。
10110010
↓
01001101
↓ +1
01001110
です。
負数の絶対値を求めるときも反転+1?
はい。
2の補数では、
正数
↓ 反転+1
負数
負数
↓ 反転+1
絶対値
と同じ操作を使えます。
先頭が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なら負数
- 負数の絶対値を求めるときも反転+1
- 1の補数は反転だけ
- 2の補数は反転+1
- 反転+1を2回行うと元のビット列に戻る
- 試験では「先頭1 → 反転 → +1」で解く