歴史的経緯とか言葉の意味とか、
「最上位ビットで+/-を表現するだけ」だと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つ増やすのに補うべき数、ということで、
補数と呼ぶことにする。
まとめると、
(引かれる数)-(引く数) ⇒ (引かれる数)+(引く数の
補数)
Read More...