TECH BLOG 技術ブログ

2020.09.03 /

2進数の足し算・引き算

前回の記事では、2進数について、そして私たちが普段使っている10進数から2進数へ、2進数から10進数へ変換する方法を紹介しました。
しかし、それだけ教えてもらったところで、カンのいいアナタはこう思うでしょう。
「2進数で四則演算ってできるの?」
実は、2進数も四則演算ができます!しかし2進数の計算って足し算と引き算だけでも奥が深く、全部紹介すると多分筆者が倒れます。
ですから、今回は2進数の足し算と引き算に絞って紹介していきたいと思います。

・2進数の足し算

みなさんは「5+3は?」と聞かれたら、反射的に「8」と答えるでしょう。じゃあ、「9+1は?」と聞かれたら、これまた反射的に「10」と答えられるはずです。しかも無意識に桁上がりもできているはず。

 9
 +1
———–
1 0
            ↑桁あがり

しかし、それは普段使っている10進数だからできること。

これがもし2進数で「1+1は?」と聞かれたらなんと答えますか?「2!」ではありませんよ?

    1
+  1
—————
1 0
            
↑桁あがり

正解は「10」です。初見じゃ意味がわかりにくいかもしれません。
しかし、よくみてください。やっていることは、10進数の足し算も2進数の足し算もほとんど変わらないんです!
みなさんがこんがらがるのはたぶん桁上がりのタイミングじゃないでしょうか。

10進数で桁上がりするのはどの数字になってからでしょうか?
もちろん、10になってからですね。しかし、それは10進数が0~9までの数字で表されるからです。9より大きい数字を表すときは左に桁を添えていきます。

2進数も一緒です。2進数は0と1だけが存在し、それ以上の数字は存在しません。だから2という数字は一桁で表せません。そこで、左に桁を添えて、元の位を0に戻して表すのです。


ちなみに1+1は2(10進数)、1+1は10(2進数)ですが、お互いは=で結べます!
前回の記事を見返してみてください。記事の通りに2進数を10進数になおしてみると…

10(2進数)= 1×2¹+0×2⁰2(10進数)

なんと、2進数の10は10進数の2でした!
つまり、2進数の計算もやってること自体は私たちの10進数の計算とやっていることは変わりません!

・2進数の引き算

続いて2進数の引き算について紹介していきますが、いきなり衝撃の事実を投げます。

ーの演算子をほぼ使いません!

そもそもコンピューターには引き算という概念がありません。コンピューターは足し算しかできないのです。

しかし実際はコンピューターは引き算を実行します。
どういうことしょうか。
実は引き算は足し算とやっていることは同じだからです。
「6-3」という計算式がありますが、これは足し算にすれば「6+(-3)」となり、答えは3となります。
コンピューターも概念がない引き算を足し算を用いて行うのです。


とはいえ、フツーに計算を行ってもうまくはいきません。
例えば7+(-3)をやる場合、2進数に直すと0111+1011となります。
なぜ-3が1011かというと、二進数で負の数を表す場合一番左のビットを1にして負の数を表現できるからです。
しかし、これ結果は10010、10進数だと18なんですね。
(理屈を書くとのびてしまうので割愛)

では、どのようにするのかというと、補数という表現を用います。

補数とは、文字通り補う数のことで、「現在の桁での最大値を得るために補う数」「次の桁に繰り上がるために補う数」の二つがあります。10進数で例えると、56という数字の場合、前者は2桁で表せる最大数99にするために43を足します。後者は、56+n=100にしたく、nは44になります。2進数では前者が1の補数、後者は2の補数と呼ばれ、ここでは「2の補数」を使います。

では、補数を使ってさっきの7+(-3)を計算してみましょう。2進数の補数の表し方は、0と1を反転させるだけ。ですから、7+(-3)の「3」を2進数にした0011を反転させます。すると1100になりました。
しかし、これで計算すると0111+1100=10011。桁が溢れましたね。こちらは、切り捨てます。答えは0011です。
0011は10進数で3です。おかしいですね。7+(-3)=3なはずがありません。
これ、0と1をただ反転しただけじゃ「1の補数」にしかなりません!
「2の補数」を表したいときは反転させた数字に1を足さなければいけません。(例 : 0011→反転→1100+1⇒1101)

改めて計算してみましょう。

7+(-3)
=0111+(-0011)       ←2進数に変換
=0111+(1100+1)    ←反転させ、1を足して2の補数に
=0111+1101
=10100                    ← あふれた桁を切り捨てる
=0100

0100を10進数に直せば、0×2³+1×2²+0×2¹+0×2⁰=4です。
10進数と2進数の答えが等しくなりました!

足し算と違って工程が多いですが、これが2進数の引き算のやり方だと覚えましょう!

・おわりに

まとめると、
2進数の足し算は10進数とやることは同じ!(桁上がりに注意!)
2進数の引き算はマイナスの数字の2進数を0と1を反転させ、+1してから足し算をします!

これでもまだ難しい!理屈を知りたい!という人もいるかもしれませんが、おそらく理屈までやるとかえって理解が難しくなります。
まずは上の計算の仕方を覚えましょう。理屈は後から覚えていきます。

それでは今回はここまで!次回もお楽しみに!!!

記事タイトルとURLをコピーする
test tel test tel