計算機は足し算のみ? 2002年3月12 日



メインメニューへ戻る


手回し計算機

手回し計算機

 皆さんが現在使っているPCも元々は卓上計算機からスタートしたことはご存知ですね?

 今日は、ちょっとその中を覗いて見ることにしましょう。キーボード、ディスプレー、本体、周辺機器などなどをたどって見るとやはり全て本体内に入っていますよね?ま、当たり前でしょうね。そこで今度は本体内に侵入しましょう、電源やハードディスク、フロッピディスク、CDRなどもある1点に集中的に入って行きますね。マザーボードです。マザーボードの上には多くのメモリー群がところ狭しと並んでいます。そのメモリーボードには多くのLSI(高度集積回路)がひしめいていますね。それらも含めやがて一つのLSIを中心に回路が形成されています。そのLSIこそCPU(中央処理装置)です。インテル社のペンティアムなどがそれですね。
 さて、その中を見てみましょう。皆さんが入力した信号は全て二進法の信号に変換されCPUに入ってきます、キーボードでもCDRでもです。そしてそれらは加減乗除の演算によって全て判断されそれに応じた結果が出力されます。判断は全て演算結果の差の判別で行っています。それらのことが実は加算つまり足し算だけで行われていることはご存知ですか?
 掛け算が足し算の繰り返しという事は理解しやすいですね?反対に割り算は引き算の繰り返しですね?そうすると引き算が足し算で出来たら、全て足し算だけで、四則計算の加減乗除ができますよね?その方法をご紹介しましょう。


 説明に入る前にちょっと二進法の説明をします。二進法は0(ゼロ)1(イチ)しか有りません。になると一桁繰り上がって10(イチゼロ)になります。だから1011+11は(正確には11にも最大の桁数に合わせて上に0が付いていて0011と今後とも考えて下さい)
  1011
 +)0011
 −−−−−−
  1110

になります。これは理解して下さいね。

 さて、実際の足し算による引き算の方法ですが、二進法ではいたって簡単 で理屈抜きで計算できます。しかし最初からは理解しにくいので まず十進法で説明します。   83 -) 9  −−−−   74 まず、これをして見ましょう。 最初に計算する元になる数字の桁数の多い方の桁数を見つけます、 ここでは83で2桁です。 次に引く数字とその数を足すと桁がさっきの2桁より 1桁繰り上がる数字を見つけます。 ここでは9+91で100になり桁数が1繰り上がり3桁になります。 この91を9の補数と呼びます。しかし、ここでは その補数から1だけ引いた90が求める数字です。 この90を引く元になる数字83に足します。    83   +)90   −−−−   73 となりますね。そして計算の結果1桁繰り上がった73のの数字を 下2桁の73に足します。すると、先ほどの答え74が得られますね? え?騙してませんよ!!ちゃんとなるでしょう? どんな数字でやっても一緒です。
 では、二進法で同様に計算して見ましょう。   110101 -)001001  −−−−−−−   101100 ですね?この際桁数は多いものに既に合わせてあります。 では引く数字001001の補数はいくつでしょう?   001001  +)110111  −−−−−−−  000000 になるので、001001の補数は110111となりますね? でも今回求めているのは十進法の時と同様に考えると 補数から1引いた110110が求める数です。 そして、引かれる元の数字110101にこの110110を足してみます。   110101 +)110110 −−−−−−−  101011 となり、1桁オーバーフローしますね?このをそれ以下の数字に加えます。   101011  +)000001  −−−−−−−   101100 どうです?一番上に書いた、引き算の答えが出ましたね? しつこいですが、騙してませんよ!!       これが二進法による足し算だけを利用した引き算の方法です。 でも、まだ疑問が残ってると思います。そうです!! 補数をそんなに簡単に計算できないじゃないか?やっぱり引き算をしないと 補数が計算できない!!そう思ってるでしょう?
 はい、では驚くほど簡単に二進法で補数を計算する方法を示しましょう。 正確には補数から1を引いた数字、まさにこの際の 計算に必要な数字を導いて見ましょう。 上の行に元の数、そして真中の行に補数から1を引いた数字を書いて見ます。 そして、一番下の行に、それを加算した数字も書いて見ます。  10100110   101010101111000111  01011001   010101010000111000  11111111   111111111111111111 一番下の行に1を加算すると1桁完全に繰り上がりますよね? だから、真中の行は一番上の行の補数引く1の数字であることが分かります。 さて、規則性に気がつきましたか? そうなんです!!一番上の行の1と0を逆にしたものが真中の行なのです。 そしては電気的にはオンオフに置き換えられますね? という訳で、驚くほど簡単に二進法では引き算に必要な補数引く1の数が 求められるのです。 どうです?簡単でしょう?分からない!?嘘でしょう?
 さて、今までは答えがプラスの計算でしたが、答えがマイナスの場合の引き算はどうでしょう?全く同じですね、というより十進法の場合でも絶対値が大きい数字から小さい数字を引いて−をつければ答えですよね?二進法でも同様です。当たり前なのにちょっとビックリ?(笑)
 では最後に絶対値の大小判別はどうでしょう?そうです、引き算をしてその答えの正負で判別します。では正負をどうして判別しましょう?十進法ではちょっと複雑ですが、二進法はいたって簡単!上に示した引き算(足し算ですよ!念のため)をして、答えが1桁オーバーフローしたら元の数字が大きく、1桁オーバーフローしなかったら引く数字の方が大きいのです。

 最後まで読んでくれました?え?挫折?あらら・・そう?残念・・
馬鹿にするな?それ以上知ってる?w(゚o゚)wワオ!!それはどうも失礼しました。
(^_^;汗〜〜今後ともよろしく(^。^)てへへ〜〜!!


メインメニューへ戻る