0
1

More than 3 years have passed since last update.

基本情報で必要な数学(2進数その2)

Last updated at Posted at 2019-11-17

2進数で補数の計算

その2では補数の計算について紹介します。ちなみに、どうしても苦手なら飛ばしてもいいかもしれません。基本情報の場合、午前試験では毎回数問、午後試験ではほとんど使わないと思います。

補数ってなに?

ちなみに補数を最初に考えた人ってすごいと思いました。補数を使えば、引き算を足し算で行うことが出来ます。このテクニックで、コンピュータに足し算の機能のほかに引き算の機能を追加せずに済んだわけです。引き算の答えを足し算ではじき出すのですからね。反対のことをして答えを出すってすごいと思いました。では補数を紹介していきましょう。

10進数の補数

では、まずは10進数で補数を考えましょう。普通に引き算を考えます。
$$
618 - 271 = 347
$$
なんてことない引き算です。ではこれを補数のテクニックを使ってやってみましょう。
$$
618 - 271 = 618 - 271 +1000 -1000
$$
これを計算します。
ちなみに。$1000-1000$は結局$0$ですから、足し算をしても結果は変わらないです。
まず、真ん中の2つです。
$$
-271 + 1000 = -271 + 999 + 1 = 728 + 1 = 729
$$
なぜ、ここで$1000=999+1$にしたかというと、桁の繰り下がりとかを気にしなくてよくなるからです。
筆算をしなくてよくなります。これは暗算テクニックです。ただし、2進数でも同様のことをやるので要注意です。

ではつぎの計算です。
$$
618 + 729 -1000 = 1347 -1000 = 347
$$
となります。まあ、当然同じ結果になるわけですが。。。
それでは、このとき,
$$
1000-271 = 729
$$
が補数です。この補数を足して、一番うえの桁に出てくる$1$を無視すると同じ計算になるのです。
10進数ではそんなに効果はないです。では、2進数ほ考えてみましょう。実は2進数では補数が威力を発揮します。

2進数での補数

簡単な例題から考えましょう。ここからは、数字は2進数です。
$$
111 - 10 = 101
$$
ですが、補数を考えましょう。
ちなみに、計算では最大3桁なので3桁での補数を考えます。

\begin{eqnarray}  
111 - 10 &=& 111 - 10 + 1000 - 1000\\
 &=& 1000 -10 + 111 -1000 \\
 &=& 111 + 1 - 10 + 111 - 1000 \\
 &=& 101 + 1 + 111 - 1000\\
 &=& 110 + 111 - 1000 \\
 &=& 110 + 111 - 1000 \\
 &=& 1101 - 1000 \\
 &=& 101
\end{eqnarray}

ここで$10$(ここでは3桁であることをはっきりさせるために$010$と書きましょう)の補数は
$110$です。このとき実は$010$補数$110$はつぎの2ステップで求めることが出来ます。

  1. 各桁の0と1をひっくり返す。
  2. それから、1を足す。(2進数なので、各桁には1か0しかないです。)

じつはこれだけです。計算を丁寧にやれば何行もかかりましたが、2進数の場合はこんなに簡単に求めることが出来ます。じつは、上で協調した計算テクニックが効いてるのです。「2進数なので、各桁には1か0しかないです。」という特徴のため、0と1をひっくり返すだけになるんです。
qiita 1(2進数の補数).PNG
もちろん、最後に$+1$は忘れないでください。
ちなみに、参考書的な言葉で言うと

$+1$する前を1の補数
$+1$した後を2の補数といいます。

ちなみにコンピュータ的にいうと一番上の桁を$+$や$-$に使ったりします。
$1$が$-$で$0$が$+$です。
なので、$+$の数を一番上以外の桁で考えて$-$をその1の補数や2の補数で考えます
4桁の場合が次の表になります。

10進数 $+$の2進数 1の補数 2の補数
0 0000 1111 (1)0000(5桁目は無視)
1 0001 1110 1111
2 0010 1101 1101
3 0011 1100 1101
4 0100 1011 1100
5 0101 1010 1011
6 0110 1001 1010
7 0111 1000 1001
8 1000 0111 1000

ちなみに、8を見てください。4桁目が$+$では$1$、$1$の補数では$0$となっており、逆転してしまいました。なので、$1$の補数は実は8では使えません。しかし、$2$の補数では使えます。
これが、ややこしいところです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1