コンピュータの得意な処理
コンピュータは足し算がとても得意。
回路を単純に保つため。
しかし
足し算は知っているが、引き算、掛け算、割り算は知らない。
コンピュータは工夫してそれ以外の計算を行なっている。
気づき
足し算以外知らないのは知らなかった。
どんな工夫をしているのか?
これから期待だ。
足し算しか概念がないコンピュータに引き算を理解させる。
足し算しか知らないので足し算で引き算を行う。
それは負の数を表現すること。
負の数で足すと引き算になる。
気づき
どうやって負の数を表現するのか?
負の数のあらわし方
最初の一桁が0の時 正の数
1の時 負の数
2進数で表された3と−3を足し合わせても0にはならない。
00000011+10000011=10000110になる。
そのために補数を使う。
それはその桁数での最大値を得るために補う数
、次の桁に繰り上がるために補う数
という2つの補数がある。
気づき
そもそも補数は必要なのかうまく想像できない。
補数は計算を完了させるために設けられていると思っている。
10進数の場合は補数は要らないのかな?
負の数を表すために一桁で表すからどうやって引くのか?
そうか負の数を作るための補数なのか。
10進数の補数の場合
桁数での最大値を得るために補う数(123の場合)
999から123を引けばその数の補数を得ることができる。
これを9の補数
次の桁に繰り上がるために補う数(123の場合)
1000から123を引けばその数の補数を得ることができる。
これを10の補数
2進数の補数を求める(これが問題だ)
0011これは3を意味する。
この桁の最大値は1111になる。
そこから1111から0011を引くと1100になる。(これが1の補数になる)
一桁上げるための補数
10000から0011を引くと1101になる。(これが2の補数になる)
00000011(3)+11111101を足すと100000000になる。
8ビット部分だけをみれば全部0になる
負の数を表すには2の補数で表す
。
気づき
なんか8ビットだけをみると0になると説明されてもわからないが
こう表現されるのであれば仕方がない。
理解はできないけどこうなるのなら覚えよう。
2の補数は負の数