# 2-1. 2進数の足し算と引き算 ## 負の数の表し方 - コンピュータは**負の数を表すのに2の補数を使う** ## 補数って何? - 補数は2つ存在する - その桁数での最大値を得るために補う数 - 次の桁に繰り上がるために補う数 ## 2進数の場合 - 1の補数 - 2の補数 ### 1の補数 `ある数 + 1の補数 = 1` ``` 例1. 「1」 の 「1の補数」 1 + 0 = 1 ...「1の補数」 は 「0」 例2. 「0」 の 「1の補数」 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: `基本情報技術者試験`