fc2ブログ

「2進数の引き算」

「社会と情報」の授業は、
先週から2進数の引き算や、
負の数の表現などに入っています。

生徒の復習用に、
授業のエッセンスをこのブログに
まとめておきたいと思います。

今回は、2進数の引き算の原理についてです。

1 10000円で買い物

もう30年以上前ですが、
「いちのへストア」(現在のジョイス)などの
スーパーマーケットの就職試験に
釣り銭計算の適性試験が
出されていたことがありました。

2564 3876 8924 7631 ・・・

など、4桁の数がたくさん並んでいて、
10000円札からのお釣りを
どんどん書いていくというものです。

皆さんはどのように計算しますか。

実はこの計算には
スペシャルメソッドがあります。

それは9による補数表現を使う方法です。

9の補数とは、
例えば5といわれたら4、
6だったら3というように、
あわせて9になるような
相方の数のことです。

この考えによって、
次のように釣り銭計算します。

例えば2464円の場合、
まず次のように各桁の数の
補数を書き込みます。

2 → 7 
4 → 5
6 → 3
4 → 5

出てきた答えに1を足せば
それが1万円からのお釣りです。

7535+1=7536円

なぜこのようにできるのでしょう。

それは、

10000=9999+1

と考えれば簡単にわかります。

10000-2464
=9999+1-2464
=9999-2464+1
=7535+1
=7536

ということですね。

私は初任校で、
就職試験に向かう生徒たちに
9による補数を
瞬時に頭に浮かべるような
トレーニングをしていました。

学力検査で数学の点数が
0点~9点という生徒が
たくさんいる学校でしたが、
どの生徒も、
とっても楽しく取り組んでくれて、
全員が30秒で20個以上の釣り銭を
書き込めるようになったことを覚えています。


2 9の補数表現を用いた引き算

では、この考えを使って
引き算をしてみましょう。

例えば、

734-485

を考えましょう。

普通に引き算しようとすると、
引かれる数より引く数が
大きかったりすると面倒ですね。

そこで、次のように考えます。

734-485
=734-485+1000-1000

いきなり1000を足して1000を引きます。

こうやっても元の式と変わりませんね。

伊藤潤一先生によると、
このような手法を

「殴って、さする」

というのだそうです。

頭を殴ってからさすれば、
何もしなかったことと同じ、というね(笑)。

さて、さらに次のように考えていきます。

734-485+999+1-1000
=734+(999-485+1)-1000

上の式のカッコ内が
先ほどの補数表現によって、
瞬時に515とわかります。

ということは、
734+515という「足し算」をして、
その結果である和の1248の
最高位の位(1000)を落としたものが
答えということになりますね。

3 2進数の引き算

では本題に入りましょう。
いよいよ2進数の引き算です。

例えば、

111011-101100

という6bitの2進数の引き算を
考えてみましょう。

まず、「殴ってさすり」ます。

111011-101100+1000000-1000000

ここで、

1000000=111111+000001

であることに注意してください。

すると、今度は引く数101100の、
9ではなく1による補数表現を
考えるわけです。

つまり、

101100+ナゾの数=111111 

となるような数です。

それは、101100の各桁の数について、
0を1、1を0に反転させればいいだけですね。
これは10進数よりめっちゃカンタンです。

そこで、010011が得られ、
それに000001を足すと
010100が得られます。

すると、最初の引き算は

111011+010100-1000000

つまり、最初の2数の和を求めて、
最高位の数を
カットすればいいということです。

足し算はもう皆さんやっていますから
大丈夫ですね。

111011+010100=1001111

よって答えは001111ということになります。

実際、111011を10進数で表すと
32+16+8+2+1=59

101100を10進数で表すと
32+8+4=44

59-44=15となり、
15を2進数(6ビット表現)で表すと
001111となるので、
確かに正しいことがわかりますね。

このように引き算を補数による
足し算に変換することで、引き算も
コンピュータ上では加算回路だけで
賄うことができるわけです。

簡単な方法ですが、普段使わないので
忘れてしまいそうですね。
ホワイトボードに書いた
板書をあげておきますので
時々確認してくださいね。

2sinm02.jpg

2sinm01.jpg


では次回は
負の数の2進数表現についてまとめますね!



 

コメント

コメントの投稿

  • URL
  • コメント内容
  • password
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL: http://simomath.blog.fc2.com/tb.php/1605-076f3c59