二進法の足し算,引き算,負の数の表現方法を学ぶためのプログラムです.
作品はここにあります.
用意する部品はこの3つ
青と赤の玉は半透明な色で描いています.そうすると重なったことがわかりやすいので.+とーの記号は一つの部品で,
のように作られています.
メガネはこの5つです.
上から,「+」をタッチすると青い玉がでる.「ー」をタッチすると赤い玉が出る.青い玉は+1,赤い玉はー1の意味です.3つ目のメガネは,青い玉が2つ重なると隣に青い玉が1つできます.これが2進法の基本の部分で,2進法での1+1=10という計算に対応しています.4つ目のメガネは+1と−1が重なると打ち消し合います.5つ目のメガネは何もないところに−1があると,桁下がりして,その桁には1になって,一つ上の桁に−1が進みます.これはちょっと難しいので後でちょっと説明します.
ステージにはこのように並べます.ここでは桁がわかりやすいように1から32までの数の部品も用意して置いています.
まず足し算をやってみましょう.3+6を計算してみましょう.3は1と2に分解できるので,2の+と1の+を押します.すると
のようになります.6は4と2に分解できるので,4の+を押して
つぎに2の+を押して
桁上がりがおきて,
となります.これは8と1なので9ですね.3+6=9で合ってます.
次に引き算です.最初に5−3を計算させてみましょう.これが5は4と1なので,
3は2と1ですが,引き算なので「ー」の方を押します.2のーをおして
赤い玉だけの場合は,桁下がりがおきて
上の桁で赤と青が打ち消しあって
上の桁がきえます.次に1の桁のーを押して
1桁目に赤い玉と青い玉が打ち消しあって,
となります.5−3=2なので,合ってます.
最後に引ききれない計算をしてみましょう.5−8です.まずは5をセットします.
つぎに8を引くので,8のーをタッチします.
これは桁下がりがおきるので,そこに青い玉,隣に赤い玉,次々と順に桁下がりが起きて,
のようになりました.どんどん桁下がりが起き,画面をはみ出てしまいました(画面は横方向に繋がらない設定にしてます).
はたしてこの並び方が5−8の答えなのでしょうか.5−8は−3なので,この答えに3を足してみます.
3は2と1なので,まず2の+をタッチして
つぎに,1の+をタッチすると,桁上がりがどんどん起きて,
最後は全部消えてしまいました.全部消えたということは0です.つまりさっきの,
は−3を表していることになります.
本当はこの並びは64+32+16+8+4+1なので125という数を表していてもよいのですが,画面をはみ出すことを無視して−3を表しているという約束にします.負の数かどうかを決めるのは一番左の桁に青い玉があるかどうかです.
このやりかたで,表現できる一番大きな数は
です.32+16+8+4+2+1で63です.次の桁が64なのでその一つ前の63ですね.
では,0の状態から−1ずつ減らしてみると.まずは
これがマイナス1です,つぎが
これがマイナス2です.その後順に減らしてゆくと
−3
−4
−5
−6
−7
−8
これがマイナス9です.マイナスの数の計算方法は,青い玉がないところの桁の数を足して,さらに1を足した数のマイナスということです.このまま続けてゆくと一番小さな数は,
になります.これはマイナスなにかというと32+16+8+4+2+1=63で,それにさらに1を足すと64なので,マイナス64ということです.
もともと7桁の2進法は0から127までの数を表すことができましたが,一番上の桁でマイナスの数を表す約束にすると,−64から+63までの数を表すことができるようになるのです.
このような負の数の表現方法を2の補数表記と言います.この表記の最大の特徴はプログラムをまったく変更しないでもマイナスの計算が可能になったということです.
どの表現方法でも,その桁を超えるような大きな(小さな)数字を扱うことはできません.
そういえば,昔のテレビゲームで得点が大きくなりすぎて突然マイナスの数が表示された,ということがありましたよ.