---
# System prepended metadata

title: 2-1. 2進数の足し算と引き算
tags: [基本情報技術者試験]

---

# 2-1. 2進数の足し算と引き算
## 負の数の表し方
- コンピュータは**負の数を表すのに2の補数を使う**

## 補数って何？
- 補数は2つ存在する
  - その桁数での最大値を得るために補う数
  - 次の桁に繰り上がるために補う数
## 2進数の場合
- 1の補数
- 2の補数

### 1の補数
`ある数 + 1の補数 = 1`
```
例1. 「1」 の 「１の補数」
    1 + 0 = 1    ...「1の補数」 は 「0」
    
例2. 「0」 の 「１の補数」
    0 + 1 = 1    ...「1の補数」 は 「1」   
```

### 2の補数
`ある数 + 2の補数 = 2(10)`
```
例1. 「1」 の 「2の補数」
    1 + 1 = 10    ...「2の補数」 は 「1」
    
例2.  複数桁の場合
    0110 + 1010 = 10000    ...「2の補数」 は 「0」 
    (桁上りして残りが0になる)
```

## 簡単な求め方
### 1の補数の求め方
ビットを反転させる！
```
1010 の「1の補数」は 0101
```
### 2の補数の求め方
ビットを反転させ、1を足す!
```
1010 の「2の補数」は 0110
```

## 補数で何ができんの？
最初に記述したように、コンピュータは**負の数を表すのに「2の補数」を使う**
つまり、2進数の引き算をする時に2の補数が使える！

## 引き算の流れをみてみよう！
`5 - 3 = 2`を2進数でやってみる！
```python
0101 - 0011    # 5 - 3
= 0101 + (-0011)
= 0101 + 1101    # 0011の2の補数
= 10010    # ↓桁あふれしたビットを切り捨てる
= 0010    # 2
```

## 1ビット目は符号
よくわからんが、2の補数で負の数を表す場合も、1ビット目を符号として扱うことができる

###### tags: `基本情報技術者試験`
