« デジハリ:先端色彩講座プレ授業 | トップページ | デジハリ080531 »

2008年5月30日 (金)

情報B:負の二進数

情報Bでは、二進数における負の数の扱いに入った

もう1年半も前のエントリ負の二進数は、このブログの中で頻繁に閲覧していただいているものの一つ。今年初めて情報Bの主担当となり、授業という形では始めて教えることができた。


コンピュータは単純な演算しかできなくて、負の数の扱いや引き算は、人間が仕込んだ特殊な方法で計算を実現していることを話してある。また、二進数ゆえにラクなこともあり、「0を掛ける」「1を掛ける」はその最たるもの、九九を覚える必要がない。授業では、一般の掛け算は、ビット列のシフトと和で実現することまで説明が済んでいる。

■荒っぽいが、負の数の表現を説明した手順を示す。数学ではないので、N進数に発展させる気はない。

(1)二進数の正の整数の復習
Windows付属の電卓を利用して、二進数・1バイトの表示を設定する。最初は、「1++1=」に続き「=」を連続してクリックして、1ずつ増加させていく。

(2)オーバーフローの体験
080530calc02
8ビットの「11111000」を入力し、「++1=」に続き「=」を連続入力、表示が「11111111」になったところで、次の表示を予想させる。
実行させると「0」となるが、「00000000」と同じであることも確認しておく。

(3)「11111111+1=0」の刷り込み
オーバーフローする瞬間で、生徒にはとてもインパクトがある。後の説明への布石として、「11111111+1=0」という式を強調しておく。

(4)視点を変える
目玉おやじのようなキャラを描き、水平に対して、仰角を1度、2度、・・・と数えて行き、180度から先は、地べたの下の角になり、358度、359度、ときて、次が360度、いや、オーバーフローして0度になる、と。
ところで、負の角度というものを考えるときに、「-」という記号が使えないならば、例えば『330度』に『-30度』にあたる角という役割を与えればよい。同様に、180度~359度までに、負の角を表すという役割を与えることにする。
結局、0度~359度までの、後ろ半分の数に負の数の役割を与えることになる。

(5)視点を戻す
1バイトの「00000000~1111111111」も後半の数、つまり先頭ビットが1の数に対して、負の数を表す役目を与える。
つまり、10000000~11111111、00000000~01111111という順に数が大きくなっていく。

(6)電卓で実験
『-1』にあたる数を電卓で表示させるために、「0-1=」を実行させる。
結果は、
080530calc04
これも、インパクトとともに説得力がある。
一応、「0--1=」に続き「=」を連続入力して、『-2』、『-3』・・・の役割を果たす数を確認する。

(7)正負を逆転した数の和が0になることを確認
『8』にあたる「00001000」と『-8』にあたる「1111111000」の和を、手計算で求める。オーバーフローして0になることが確認できる。

(8)任意の1バイトの二進数に対して、全てのビットを反転した数を加えると「11111111」になることを理解

(9)(3)の式を取り上げて、任意の1バイトの二進数に対して、全てのビットを反転した数、さらに1を加えると0になることを理解

(10)(9)の文章から、
「任意の1バイトの二進数」と「全てのビットを反転して1を加えた数」は和が0になるので、この両者は正負を逆転した数に他ならない。

(11)結論
ビット数に限りのある二進数で負の数を考えるとき、「任意の二進数の正負を逆転した数」=「ビットを反転して1を加えた数」

■引き算の説明

正負を逆転した数の作り方が分かれば、引き算を足し算で行うことができる。
例えば『6-4=2』にあたる計算を4ビットの二進数で説明する。

 0110-0100 = 0110+(1011+1) = 0110+1100 = 0010

※『4-(-6)=10』にあたる計算などは例としてマズイ。4ビットでは、-8~7までの数しか表現できないからだ。

■次回は、論理演算と論理回路を扱う予定

AND,OR,NOTの組み合わせ例として、半加算器の振る舞いを説明する。コンピュータの中では、このような単純作業が高速で行われていることを理解する。同時に、論理回路が上述のような計算の仕組みを支えていることの理解を深める。

|

« デジハリ:先端色彩講座プレ授業 | トップページ | デジハリ080531 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/178689/21295224

この記事へのトラックバック一覧です: 情報B:負の二進数:

« デジハリ:先端色彩講座プレ授業 | トップページ | デジハリ080531 »