ナギサものおき

ゲームを楽しく遊びたい!

【Minecraft PE】RS回路で計算機を作ろう 第2回「2進数」

time 2016/02/29

【Minecraft PE】RS回路で計算機を作ろう 第2回「2進数」

さて、前回に引き続き、レッドストーン回路で計算機を作るために必要な知識を少しつまんでいこうと思います。

知識面でのフォローをするだけなので、まだ実際に計算機を作るわけではありません。これで終わりにするので、もう少しお付き合いください。ここでは、レッドストーン回路で計算をさせるために必要な「2進数」の概念について学んでいきましょう。

広告

10進数

221

私たちは「10進法」でものを数えることが多いです。1の位、10の位、100の位、……に0~9の数字を置くことで、ある数を表すという方法ですね。これであらわされた数を10進数と言います。

この10進数をそのままレッドストーン回路で取り扱うことができれば、計算機を作るのはラクそうですが……どうでしょうか。

144

コンパレーターを使うとできます。コンパレーターは信号強度を使って引き算をすることができたので、0-0から15-15までの計算はできますよね(※)。さらに足し算は引き算の逆の計算なので、逆の見方をすれば足し算もできることになります。

※厳密には16進数を扱っていると言ったほうがいいかもしれませんが、ここではスルーで。

減算(引き算)

それでは、実際にコンパレーターを使って計算をしてみます。

220

まず、コンパレーターは点灯モードにしておきます。点灯モードだと、「後ろの信号強度 – 横の信号強度」が出力になるので、これを減算の計算として使えばよいわけです。

222

例えば 7-4 を計算するには、横のワイヤーの長さを7、後ろのワイヤーの長さを4にします。すると、出力の信号強度が答えになります(上のようにしていれば、点灯したランプの数を数えればいいわけです)。

なぜ横のワイヤーのほうが長いのか

コンパレーターは「後ろの信号強度 – 横の信号強度」が出力になるのでした。つまり後ろのワイヤーの長さをA、横のワイヤーの長さをBとすると、後ろの信号強度が16-A、横の出力強度が16-Bになるので、出力は (16-A) – (16-B) = B – A となります。出力は最低0なので B≧A である必要があり、横のワイヤーのほうが長くなければならないのです。

加算(足し算)

コンパレーターは加算をすることはできませんが、減算と加算は逆のことなので、先ほどとは逆の手順でやれば加算もできます。

223

例えば 5+3 を計算するには、まず後ろのワイヤーの長さを3にし、そしてランプが5個点灯するように横のワイヤーの長さを調節します。ランプが5個ついたら、横のワイヤーの長さを数えれば答えになっているというわけです。

信号強度を計算に使うことのデメリット

このように信号強度を計算に使うことも不可能ではないのですが、デメリットが存在します。

118

信号強度はワイヤーを流れるうちに減ってしまいますが、それが1ブロックごとに起こるせいで扱いにくすぎるのです。

224

まず、ワイヤーの長さを1マスずらすだけで結果が変わってしまいますよね。例えば 7-4 を計算したいのに、横のワイヤーの長さを誤って8にしてしまうと、間違った結果である「4」が出力されてしまいます

225

さらに、もともと遠くにある信号同士を計算する方法がありません(※)ね。上の画像で「3-1」を計算したいとしても、元の信号が弱いので無理です。

そういうわけで、信号強度を計算に使うのはまったくおすすめできません。その代わりに利用するのが、「ワイヤーがONかOFFか」の考え方です。

226

※実はコンパレーターを連結すれば信号強度を減らさずに遠くまで運ぶことができますので、全くないといえばウソです。ただ、信号強度同士の計算そのものに発展性がない(この言葉の意味はそのうち分かるでしょう)のでここまでする意味はないでしょう。

2進数

227

論理回路を作るとき、ほとんど「このワイヤーの信号強度は……」なんてことは気にしませんでしたよね。なぜかといえば、論理回路は「ワイヤーがONかOFFか」ということだけが結果(出力)に影響するものだからです。

例えばAND回路の入力信号強度が1だろうと15だろうと、それはAND回路の立場で見れば「ON」という同じ入力であり、強度の違いは関係ありません。

228

この考え方を借りると、先ほどのデメリットは発生しません。ONかOFFかだけを気にするようにすることで、1マスでもズレると結果がおかしくなるという問題は解決します。

ONになる区間は15マスもあるので、1マス程度ズレたところで回路には影響を与えません。ワイヤーの長さが15を超えるときに、リピーターをはさむことにだけ気を付けていればよいですよね。

229

ただし、新たな問題も出てきます。そもそも「OFFなのかONなのか」しか気にしないので、0か1の数字しか使えないということになります。そんなことで、いろいろな数を表すことができるのでしょうか?

230

実はできます。0と1という2種類しかなかったとしても、たくさん並べれば無限の種類の数字を作ることができるじゃないですか。これを2進法といい、2進法であらわされる数を2進数といいます。

2進数で数を表す

ここまでの説明ではよく分からないかもしれませんが、まずは2進数に慣れていきましょう。

普通の数(つまり10進数)を子どもが初めて数えるとき、「1,2,3,4,5,6,7,8,9,10」と覚えますよね。それと同じやりかたで、2進数を数えていきたいと思います。もちろん私たちは「0」という数字を知っているので、0から数えることにしますが。

231

まず「0」と「1」はどちらも同じですね。2進数でも10進数でも、その2つの数字は使えるからです。

232

しかし「2」を数えたいときに問題が発生します。2進数は「0」と「1」という数字しか使わないというルールなので、「2」という数字は使えないのです。

233

こういうときは仕方がないので、上のケタに繰り上げてしまいます。10進数では「どこかのケタが10になったら上のケタに1足す」ですが、2進数では「2になったら上のケタに1足す」のです。

234

次に10進数で「3」を数えます。2進数では「10」の次になるので普通に「11」でいいですね。

235

10進数で「4」は、2進数では「11」の次です。やはり「2」という数字が使えないので「12」とは書けません。よって、ケタを1つずつ繰り上げる必要があり、「100」となります。

10進数で99に1を足すと100になる、ということと同じです。2進数で11に1を足すと100になるのです。

236

これを繰り返していって、上のような表ができます。これで10進数で0~12までの数は2進数でも表せることが分かりましたが、もっと大きな数でも、同じように数えていけるはずですので、2進数でも必ず表すことができます

数の表し方

さて、ここまで読んでくださったあなたは、もはや10進数だけを使う人ではなくなりました。

例えば「17」という数字は「7」という数字が使われているので、10進数か2進数かどちらかといえば「10進数」だと分かります。しかし、「10」と書いた場合にはこれが10進数なのか2進数なのか分かりませんよね。

これを解消するために、これからはn進数のとき (n) を数字のあとにつけます(※)。例えば「2進数の101」を表したいときは 101(2) と書きます。

237

※手書きなどのときは小さく書きますが、Webでいちいちそう書くのも苦しいので大きさを変えずに書くことにします。

これを使えば、例えば 10(10) = 1010(2) などの等式も作れますね(10進数の10は2進数の1010と等しい、という意味)。これを今後よく使うので、覚えておいてください。

計算機に使うには

あとはワイヤーのOFFを0という数字に、ワイヤーのONを1という数字に対応させれば(※)、回路上で数字を扱うことができるようになります。

※もちろんOFFを1に、ONを0に対応させたって別に何の問題もないのですが、「無=0」というイメージがあるのでこれが普通でしょう。

238

例えばこのように、レバーとランプをつないだ回路を4つ用意するとします。すると、ランプの点灯/消灯の組み合わせによって、4ケタの2進数を自由に表示できることになります。

239

例えば、「ON,OFF,ON,OFF」なら「1010(2)」と見ることができるので、この回路で表示している数は「10(10)」と定義できます。

240

「OFF,OFF,ON,ON」なら「0011(2)」なので「3(10)」を表示していると定義することができます。

4ケタの2進数は0(10)~15(10)までを表せるので、この時点で既に信号強度で表現できる数の幅と同じになりましたね。もっとレバーとランプのセットを増やせばさらに大きな数を表示できるので、この数の表し方のほうが表現できる数は多い(というか無限)のです。

241

あとはこの回路を2セット用意して、その両方を入力にすると、それを足し合わせた結果が出力になるような論理回路を作ることができれば、それがまさに計算機ということになりますよね。

これを次回からやっていきたいのです。どうやって回路で計算なんてするのか、というイメージがつかめましたか?

終わりに

少々こみいった話になりました。計算機を作るということは、ちょっとしたコンピューターを作るということだと言っても過言ではありません。つまり今回教えた2進数というものは、コンピューターの動作原理そのものなのです。人によっては難しかったかもしれませんね。

もし分からない点などあれば、コメント欄にて質問してください。記事を今後修正するための参考にさせていただくという意味もありますのでご遠慮なくどうぞ。

広告

down

コメントする




動作報告や質問など、記事に関係する話題にお使いください。サイトポリシー

記事まとめ

ブログについて