基数変換3 2進数の加算と減算


足し算は桁上がり、引き算は桁借りがポイント!

2進数の足し算と引き算をしてみましょう。

2進数の足し算、引き算といっても、これまでと同様、10進数に置き換えて、桁上がりと桁借りの考え方を理解すれば、さほど難しくはありません。

では、まず10進数の足し算と引き算は、どうやっているか思い出してみましょう。

 

2進数の足し算をマスターしよう!

10進数の89と21を足し算します。

add_1.png

まず1桁目の9+1=10を計算し、2桁目に1を上げて、1桁目は0とします。当たり前のように計算しましたが、この「2桁目に1を上げる」というのが桁上がりです。

1が上がってきた2桁目では、1+8+2=11を計算し、3桁目に1を上げ、2桁目を1とします。

3桁目では、上がってきた1をそのまま下します。

これで89+21=110の計算ができました。

 

それでは、同じ要領で、2進数の11111と101を足し算してみましょう。

add_2.png

 1桁目 1+1=10 ...1桁目は0、2桁目に1上がる

 2桁目 1+1+0=10 ...2桁目は0、3桁目に1上がる

 3桁目 1+1+1=11 ...3桁目は1、4桁目に1上がる

 4桁目 1+1=10 ...4桁目は0、5桁目に1上がる

 5桁目 1+1=10 ...5桁目は0、6桁目に1上がる

 6桁目 桁上がりの1

したがって、2進数の11111と101を足すと、

 11111+101=100100

となります。

2進数は頻繁に桁が上がるのでなじみにくいですが、基本は10進数の計算と同じですね。

 

どうしても2進数の桁上がりを間違えてしまう場合は、少し遠回りですが、2進数の数値を10進数に変換してから足し算し、最後にまた2進数に変換する方法でも、同じ計算結果になります。

 2進数の11111 → 10進数の31  ...桁の重みを利用して基数変換します

 2進数の101 → 10進数の5  ...桁の重みを利用して基数変換します

 31+5=36

 10進数の36 → 2進数の100100  ...除算法を利用して基数変換します

 

2進数の引き算をマスターしよう!

次は、10進数の130から41を引き算します。

add_3.png

1桁目は0-1なので、そのままでは引き算できません。

そのため、2桁目から10を借りて10-1=9とし、1桁目が9になることを計算します。この「2桁目から10を借りる」というのが桁借りです。

2桁目は、1桁目に1を渡していますので、3-1=2になっています。これで2桁目を計算すると2-4なので、3桁目から10を借りて12-4=8とし、2桁目が8になることを計算します。

3桁目は、2桁目に1を渡していますので、1-1=0です。

これで、130-41=89と計算されましたね。

 

それでは、同じ要領で、2進数の101110から10011を引き算してみましょう。

10進数の桁借りは10でしたが、2進数では2を借りる、ということに注意しましょう。

add_4.png

 1桁目は0-1なので、2桁目から2を借り、2-1=1

 2桁目は1を1桁目に渡しているので0-1となっています。そのため3桁目から2を借り、2-1=1

 3桁目は0-0ですので、そのまま0-0=0

 4桁目は1-0=1

 5桁目は6桁目から2を借りて2-1=1

 6桁目は1を5桁目に渡しているので0です。

したがって、2進数の101110から10011を引くと、

 101110-10011=11011

となります。

 

2進数の桁借りがわかりにくい場合は、10進数に変換してから計算しましょう。

 2進数の101110 → 10進数の46  ...桁の重みを利用して基数変換します

 2進数の10011 → 10進数の19  ...桁の重みを利用して基数変換します

 46-19=27

 10進数の27 → 2進数の11011  ...除算法を利用して基数変換します

 

2進数の計算問題を解いてみよう!

それでは、実際に出題された問題を解いてみましょう。

試験では選択肢が用意されていますので、すべての桁を計算しなくても解答が導き出せることがあります。時間を効率よく使いましょう。

平成29年春 問72

二つの2進数01011010と01101011を加算して得られる2進数はどれか。ここで、2進数は値が正の8ビットで表現するものとする。

 

ア 00110001    イ 01111011    ウ 10000100    エ 11000101


正解は...


正解 エ

二つの2進数01011010と01101011を、1桁目から順に加算し、該当しない選択肢を除外していきます。

 1桁目 0+1=1

ここで、1桁目の値が0になっている、ウの10000100は除外されます。

 2桁目 1+1=10 → 2桁目は0で3桁目に1上がる

ここで、2桁目の値が1になっている、イの01111011は除外されます。

 3桁目 1+0+0=1

ここで、3桁目の値が0になっている、アの00110001は除外されます。

したがって、残った選択肢である、エの11000101が正解です。

 

念のため検算すると、確かにエの11000101ですね。

add_5.png

※問題文にある「8ビットで表現」とは、「8桁の数値で表す」という意味です。問題の数値も選択肢の数値も、左端に0をつけて8桁にしていますね。