2013年3月13日水曜日

小学生でもわかる、補数による負数表現


歴史的経緯とか言葉の意味とか、
「最上位ビットで+/-を表現するだけ」だと00000000も10000000も「0」になって困るとか、
とにかく難しいことは忘れる。

まずコンピュータ=

引き算の筆算で、「隣の位から10借りてくる」ことがどうしてもわからなくて、算数が嫌いになりそうな小学生

だと考える。
(ちなみに元教師の経験から言うが、
「隣の位から借りてくる」をうまく教えられるかどうかで教師の力量がわかる。)

例題:98765 - 45678












一の位から困る。泣き出す小学生。
「隣の位から」借りると難しいので、どーんと99999借りることにする。
もちろん後で返すつもり・・・たぶん。












すると、もちろん「99999 - 45678」を先に計算してもいい。
絶対に「隣から借りる」必要はないので、小学生も嬉しそう。














計算すべきは「98765 + 54321」に変身する。



引き算じゃなくなった! でもこの心の不安はなんだろう・・・
借りていた「99999」はあとで返す、という約束を思い出す。
でも「 - 99999」は、また「隣から借りてくる」苦手な計算になる。
小学生がまた泣きそう。

「あと1だけ貸してくれまへんか?あとで100000まとめて返しまっさかい・・・」
「わかってるやろな? 利息はトイチやで」

1借りたので、+ 54321 ⇒ + 54322 になる。











100000を返す = あふれた桁を消す(無視する)。











やったことを振り返る。

引く数45678に対して、99999 - 45678 = 54321を計算した。
これは各位の数を、9に対して反転させた数。
54321 + 1 = 54322を計算した。
98765 + 54322を計算した。
その答えから、溢れた桁の数を消した。

--------------------------------- きょうのまとめ ---------------------------------

引き算は、「引く数の各位を反転させた数 + 1」の足し算、に変身できる。溢れた桁は無視する。

ふりかえると、
元の数□□□□□+反転させた数■■■■■ = 99999
元の数□□□□□+反転させた数■■■■■ + 1 = 100000(桁が1つ増えた!
になっている。

反転させた数 + 1は言いにくいので、桁を1つ増やすのに補うべき数、ということで、
補数と呼ぶことにする。

まとめると、
(引かれる数)-(引く数) ⇒ (引かれる数)+(引く数の補数

3 件のコメント:

  1. これはいい。とてもよく分かりました。

    返信削除
    返信
    1. わ、コメントありがとうございます!
      数年前にちょっとだけブログというのを書いてみてすぐあきたのですが、お役に立てたなら幸いです。

      削除
  2. わかり易いです。試験に役立てます

    返信削除