---
title: "2の補数とは？負数と絶対値の求め方【基本情報技術者試験】"
description: "2の補数による負数表現を、ビット反転＋1の手順、絶対値の求め方、1の補数との違いまで整理し、FE科目Aでの判断方法を解説します。"
last_modified_at: "2026-08-14"
canonical_url: "https://stemtazoo.github.io/fe/twos-complement/"
section: "fe"
---

## まず結論

2の補数は、**コンピュータで負の整数を表す代表的な方法**です。

正の数から負の数を作るときは、

```text
全ビットを反転
↓
1を加える
```

という手順を使います。

そして2の補数表現では、負数から絶対値を求めるときも同じく、

```text
全ビットを反転
↓
1を加える
```

で求められます。

基本情報技術者試験では、

```text
2の補数
→ 反転＋1
```

をまず判断できることが重要です。

## 直感的な説明

8ビットで正の数を考えてみます。

例えば、

```text
00110110
```

を負の数にしたいとします。

まず全ビットを反転します。

```text
00110110
↓
11001001
```

次に1を加えます。

```text
11001001
+       1
--------
11001010
```

これが元の正数に対応する負数の2の補数表現です。

2の補数の便利な点は、**同じ操作をもう一度行うと元のビット列に戻る**ことです。

```text
11001010
↓ 反転
00110101
↓ +1
00110110
```

そのため、

```text
正数 → 負数
負数 → 絶対値
```

のどちらでも同じ操作を使えます。

## 定義・仕組み

### 2の補数とは？

nビットの2の補数表現では、負数を

```text
ビット反転
＋
1
```

で表します。

例えば、8ビットで `42` を表すと、

```text
00101010
```

です。

これを負の `-42` にするには、

```text
00101010
↓ 反転
11010101
↓ +1
11010110
```

となります。

### 先頭ビットで符号を見る

2の補数表現では、最上位ビットを見ると符号を判断できます。

```text
先頭が0
→ 0以上

先頭が1
→ 負数
```

例えば、

```text
01010110
→ 正の数

10101010
→ 負の数
```

です。

### なぜ反転して1を足す？

2の補数表現では、nビットの範囲で

```text
正の値
＋
対応する負の値
=
2^n
```

となるように表現します。

その結果、通常の2進数の加算回路をそのまま使って、正負の加減算を扱いやすくなります。

FEでは、仕組みを深く追うより、

```text
2の補数
→ 反転＋1
```

を使えることを優先して覚えるとよいです。

## 科目Aでどう出る？

科目Aでは、2の補数で表された負数から絶対値を求めたり、ある正数の負数表現を選んだりする問題が出ます。

例えば、

```text
11010100
```

が8ビットの2の補数で表された負数だとします。

### ① 全ビットを反転する

```text
11010100
↓
00101011
```

### ② 1を加える

```text
00101011
+       1
--------
00101100
```

したがって、絶対値は、

```text
00101100
```

です。

### 試験中の判断手順

```text
先頭ビットを見る
↓
1なら負数
↓
全ビット反転
↓
1を加える
↓
絶対値
```

とすると安定します。

## どんな場面で使う？

2の補数は、コンピュータ内部で符号付き整数を扱うときに使われます。

例えば、

- CPUの整数演算
- 符号付き整数型
- 加算・減算処理
- オーバーフロー判定

などです。

コンピュータでは、正数と負数で別々の加算回路を用意するより、同じ回路で処理できる方が都合がよいため、2の補数が広く使われています。

## よくある誤解・混同

### 1の補数と2の補数は同じ？

違います。

```text
1の補数
→ 全ビット反転

2の補数
→ 全ビット反転＋1
```

です。

この「＋1」を忘れるのが典型的なミスです。

### 先頭ビットを反転するだけでよい？

違います。

2の補数では、**すべてのビット**を反転してから1を加えます。

```text
10110010
↓
01001101
↓ +1
01001110
```

です。

### 負数の絶対値を求めるときも反転＋1？

はい。

2の補数では、

```text
正数
↓ 反転＋1
負数

負数
↓ 反転＋1
絶対値
```

と同じ操作を使えます。

### 先頭が1なら、そのまま正の2進数として読めばよい？

違います。

2の補数表現で先頭が1なら負数です。

その値の大きさを知りたい場合は、

```text
反転＋1
```

で絶対値を求めます。

### 反転＋1を2回するとどうなる？

元のビット列に戻ります。

これは2の補数の重要な性質です。

```text
元の値
↓ 反転＋1
符号反転

↓ もう一度反転＋1
元の値
```

## 確認問題（基本情報技術者試験対策）

8ビットの2の補数で表された負数

```text
11001101
```

の絶対値はどれか。

- ア. 00110001
- イ. 00110010
- ウ. 00110011
- エ. 00110100

<details markdown="1">
<summary>▶ クリックして答えと解説を見る（ここを開く）</summary>

**正解：ウ**

まず全ビットを反転します。

```text
11001101
↓
00110010
```

次に1を加えます。

```text
00110010
+       1
--------
00110011
```

したがって、絶対値は `00110011` です。

</details>

## まとめ（試験直前用）

- 2の補数は負数を表す代表的な方法
- **2の補数 → 全ビット反転＋1**
- 先頭ビットが0なら0以上、1なら負数
- 負数の絶対値を求めるときも反転＋1
- 1の補数は反転だけ
- 2の補数は反転＋1
- **反転＋1を2回行うと元のビット列に戻る**
- 試験では「先頭1 → 反転 → +1」で解く
