きんぱこ教室
BIT物語 その4
なんだか一度に3年分の頭を使った感じ。
「掛け算になると効率がいい賭け方がある」
「足し算だけでするのでしょ」
「足し算の他にシフトと言ってビットの位置をずらしながら足すねや」
「シフトですか」
「10進数で6×5は30やな。2進数なら0110×0101と言うことになるわな」
「そうですよね、1,2,4,8という桁で1のところの桁数を足すんだから、0101なら1の桁と4の桁に1があるから4+1で5ですね」
「おっちょっと解ってきたな。
0110 掛ける
0101
で0101の右一桁目が1の時はそのまま足す。
結果は 0+0110だから0110。
次は0だから何もしない。そして3桁目は1だから、このときに0110を3桁目-1個左へずらすと011000になる。これと先ほどの0110を足す。
11000 +
00110 だと
11110 になる。
2,4,8,16の桁に1があるから2+4+8+16=30と言うことになる」
「へーなるほど。そしたら0110掛ける1011は、6掛ける14だから84になるかな、えっと
0110 掛ける
1110 やから
1110の一桁目は0やから0。二桁目が1やから0110を一つ左シフトして1100と0を足して1100。3桁目も1やから0110を二回左シフトして11000、これと先ほどの1100を足したら
11000 +
01100
やから、100100かな。
4桁目にも1があるから0110を3桁左シフトして110000と先ほどの100100を足すのか。
0110000 +
0100100
やから1010100かな、4と16と64の桁に1が立ってるから足したら……おおっ84やんか」
「そうや、これやったら大きな数字でも小さな数字でも計算時間はほとんど変わらんと言うことや。なんでこんなこと教えたか言うとアセンブラでプログラムを組むときにはいかにムラ無く処理結果が出せるように組むかが重要になってくるからや」
26年前、この頃に使っていたCPUは4ビット、8ビットのCPUでした。4ビットなら2進数で4桁単位、8ビットなら8桁単位で足し算や掛け算をやって行く。(桁が足りないときはスタックポインタというところに一時退避したり取り出したりしながら処理をします)
今現在は、32ビット、64ビットですね。シフト処理のようなことを頻繁にやっている訳で、64ビットになることを想定して32ビットでプログラムを組んだ場合は64ビットでも動くでしょうが、16ビットで組まれたプログラムは流石に64ビットまでは想定していないので動かないことになります。
実際皆さんが使うプログラムが直接CPUに指示することはありませんが、お使いのソフトが64ビットで動かない場合は、このような問題が出るからでしょう。
使う側からすると、高いお金を払って買ったソフトが64ビットで使えなくなるということは、個人ユーザーにはかなりきつい問題です。
自分が使っているソフトだけを考えてみれば「もう新しくしなくてもいいじゃない」と思いますよね。
しかし、今のコンピュータは全然完成されていないわけです。だから技術革新に投資する気持ちで5年、10年単位にやってくるフルモデルチェンジに合わせてゆくしかないかと思っています。
BITの話 終わり
