2008年1月8日火曜日

続・2 進法

ども。たです。

Supernova のバッキングを原曲にあわせて練習してたら、
右手がつりそうになりました。 (TдT)
バレーコードの左手より先に音をあげさせるだけの
ストロークってどうなのよ。。。
#ま、実際はパワーコードだから、左手はそんなに辛くないのだけど。
#ハーフミュートだから右手に余計に力がはいっちゃうのよねん。

こりゃ、Gt. & Vo. への道はまだまだ遠いな。。。
#その前に、ヴォーカルとして一人前にならなきゃか。。。


んで、昨日の続きです。
昨日の最後の話は、言葉だけの説明で理解するには
少しハードルが高いかもしれないんで、理解できなくても
気にする必要はないです。

こんな話ばっかしてると、ただでさえ人が来ないのに、
来てくれた人まで逃しそうなので、この話は今日で完結させます。

PC で HDD の容量などを確認したときに、「あれっ、聞いてた
数字と違うぞ?」なんて経験はないでしょうか?
#別に、フラッシュメモリでも良いですが。。。

具体的な話をすると、40GB の HDD を買ったはずなのに
パソコンで確認してみると、37GB くらいにしか見えなかった
とか、1GB のフラッシュメモリが 953MB 位にしか見えなかった
というような経験はないでしょうか?

この話を最後まで見てもらえば、このからくりがわかるように
なるはずです。

まずは、話を簡単にするために、人間世界での話から。
ある計算を行うとして、足し算や引き算は比較的暗算でも
可能なくらいなので、難易度が低いというのはご納得いただける
でしょうか。問題はやはり掛け算と割り算です。桁が大きいもの
同士の計算になればなるほど、その計算は一筋縄ではいかなくなり、
計算機ないしは、筆算なしには解きにくくなりますよね。

でも、掛ける数、ないしは割る数が 10 とか 100 とか 1000 みたい
な数字だった場合はどうでしょう。この場合は、簡単ですね?
掛け算なら 0 の数分だけ数字をシフトすればよく、割り算の場合は、
一筋縄ではいかなそうですが、余りを気にしないとなれば、
割り算においても、数字をシフトするだけで良いということが理解
できるでしょうか?

つまり、
   12345×10 = 123450
   12345×100 = 1234500
   12345×1000 = 12345000
であり、
   12345÷10 = 1234 ・・・ 余り 5
   12345÷100 = 123 ・・・ 余り 45
   12345÷1000 = 12 ・・・ 余り 345
となります。

上記より、掛け算の場合は 0 の数だけ桁を増やすように数字
をシフトすれば良く、割り算の場合は 0 の数だけ桁を減らすように
数字をシフトすれば良いということがわかります。
これは、10 進法なので成り立つことですが、2 進法においても
このように数字のシフトだけで掛け算、割り算が行えるマジック
ナンバーがあります。10 進法におけるマジックナンバーが
10、100 (= 10×10)、1000 (= 10×10×10) ・・・だったことを
考えれば、2 進法におけるマジックナンバーも分かると思います。

そうです、2、4 (= 2×2)、8 (= 2×2×2) ・・・です。
2 進法において、この法則に則った数で掛け算、割り算を
行う限りは数字をシフトするだけで良いということになります。
コンピュータなどの世界において、2 のべき乗の数が
好まれるのはここから来ています。ハードウェアの構成が
恐ろしく簡単になるからです。このような演算方法を
ビットシフト演算と言います。
#言うはずなんです。。。私の記憶が確かならw

また、理系の世界では 3 桁ごとに単位が変わり、
1000 = 1k (キロ)、1000k = 1M (メガ)、1000M = 1G (ギガ)
となっています。
#う~ん、表現が難しいなぁ。理系の世界???物理の世界?
#科学の世界?ま、どうでも良いか。。。
#ちなみに、FF のメガフレアとかギガフレアってのは、この
#メガやギガのことです。とにかく威力抜群っ!みたいなw

んで、さらに上手いことに 2 を 10 回掛けると 1024 という
1000 に近い数字が得られます。これを利用して、計算を
楽しようとしているため、冒頭のように 40GB が 37GB であるとか、
1GB が 953MB に見えるようなことが起こるのです。

どういうことかというと 40GB は 2 進法において、
100101010000001011111001000000000000
#長ぇ。。。
と表され。これを kB 表記に直すと 2^10 = 1024 なので、
余りさえ気にしなければ、10 桁数字を削ればよいだけなので、
10010101000000101111100100 kB
となります。

これでもまだ数字として大きい (桁が多い) ので、さらに
上の MB 表記にすると、同様に
1001010100000010 MB
となります。

まだでけぇってんで、さらに 10 桁ずらして GB 表記に直すと、
100101 GB となり、これを 2 進法から 10 進法に直すと、
2^5 + 2^3 + 2^1 = 37 GB となるわけです。

同じように 1GB は 2 進法では、
111011100110101100101000000000
となり、これを kB、さらには MB にするために 20 桁
ビットシフトをすると
1110111001 MB
となり、これを 10 進法に直すと、
2^9 + 2^8 + 2^7 + 2^5 + 2^4 + 2^3 + 2^0 = 953 MB
となるというわけです。

やっぱり文字だけで説明するのは難しいわ。
ご理解いただけましたかね?
こんな話にお付き合いいただいてありがとうございますわ。
#って、誰のためにやってたんだっけか???

ま、良いか。。。
では。

0 件のコメント: