bit と 2 進接頭辞の変換
最近 "64bit" て言葉をよく聞くし実際動いてるモノも普通に見かけるようになってきたんだけどそれがどのくらいの数を扱えるのか感覚としてわかっておきたい、みたいな。ある architecture でどの程度の primary memory を扱えるのかとか overflow させないために必要な容量の算定とかに使う。
とりあえず前提として以下の表にあげてある計算はパッとできないとツライんだけども。
20 | 1 |
21 | 2 |
22 | 4 |
23 | 8 |
24 | 16 |
25 | 32 |
26 | 64 |
27 | 128 |
28 | 256 |
29 | 512 |
210 | 1024 |
もひとつ、単位の大きさも Ei あたりまでは覚えておかないとダメかも。小さい方から Ki, Mi, Gi, Ti, Pi, Ei みたいに順番に言えるようになれば問題ない。
210 | Ki |
220 | Mi |
230 | Gi |
240 | Ti |
250 | Pi |
260 | Ei |
270 | Zi |
280 | Yi |
でまぁ具体的に 210 = 1024 = 接頭辞の変わり目ということを利用して実際の数を計算する。 16bit を例に挙げると 216 = 26 * 210 = 64Ki という形。接頭辞で誤魔化してるんだけど感覚としてはわかるよね。
ちゃんと計算するとなると 1024 ってけっこうめんどい数字なので 1000 で近似してしまうとか。まぁほんとに rough なハナシするときにしか使えないんだけど。
で、ここらへん加味して有名どころを列挙すると以下のようになる。 128bit とか単位足りないんだけど…。
bit | primary prefix | raw |
---|---|---|
8bit | 28 = 256 | 256 |
16bit | 26 × 210 = 64Ki | 65,536 |
32bit | 22 × 230 = 4Gi | 4,194,304 |
64bit | 24 × 260 = 16Ei | 18,446,744,073,709,551,616 |
128bit | 28 × 240 × 280 = 256 Ti × Yi | 3.4028236692093846346337460743177e+38 |
とまぁ、 1 word が 32bit な machine の場合は C 言語の int で 4Gi 個の数を扱えるとか Windows XP は 32bit OS なので 4GiB の memory しか扱えないとか。そう考えると 64bit Windows 7 で 192 GiB しか memory が扱えないのは少ないような気がしてくるね。理論上は 16EiB まで addressing できるんだけど何か他に制限があるのかも。
あーここらへんは 1 word で memory adrressing してるという前提のハナシね。やっぱり C 言語の例だけど pointer 型の大きさが 1 word というのもわかりやすいしそれだけで済むというのは狙って設計したからなのかなと思ってしまう。 MS-DOS の memory addressing とか知ってるとなおさら。 16bit OS なのに 1MiB の memory を管理できた、というのは有名だけど仕組みとしてはけっこうめんどくさかったよなぁ。