プロが教える店舗&オフィスのセキュリティ対策術

しょうも無い質問をします・・・

よくメモリやbit数が32とか256とか「8」の倍数で作られているのは何故ですか?
「9でもいいじゃん」とか言う話じゃなくて、何故「8」にする理由があったかを聞きたいです。

A 回答 (8件)

No.1の回答にある通り、8の倍数と言うよりは、2の倍数になっています。



で、なんで2の倍数になっているかと言うと「どこを読み書きするかを電気信号のオンオフで指定する時に、2の倍数だと都合が良いから」です。

メモリに読み書きする場合は「アドレスバス」に「読み書きするのはここです」と言う電気信号を流して読み書きします。

このアドレスバスは何本も束になった電線みたいな物で、一本々々のオンオフの組み合わせで「ここです」を示します。

コンピュータのメモリのアドレスは「0番地」とか「1番地」とか、番地を数値で表現しますが、この数値を2進数にして2進数の各桁を束になった電線の一本々々のオンオフに対応させれば、メモリを読み書きする場所が指定できます。

メモリ上に記憶出来る場所が2ヶ所あれば、1本の信号で「オフなら1ヶ所目、オンなら2ヶ所目」と指定出来ます。

表にすると、こうなります。

信号|場所
--+----
オフ|1ヶ所目
オン|2ヶ所目

2進数での番地は「0」と「1」になります。

では、記憶出来る場所が4ヶ所の場合はどうでしょう?2本の信号のオンオフの組み合わせは4通りあるので、信号線は4本ではなく2本で済みます。

信号1、2|場所
-----+----
オフ オフ|1ヶ所目
オフ オン|2ヶ所目
オン オフ|3ヶ所目
オン オン|4ヶ所目

2進数での番地は上から「00」「01」「10」「11」になります。10進数では「0」「1」「2」「3」です。

信号線を1本増やしただけで「記憶出来る場所の数」が2個から4個に飛びました。

もし3個ならどうなるでしょう?

信号線が1本では2ヶ所しか表現できず足りないので、4ヶ所の時と同じように2本にします。

信号1、2|場所
-----+----
オフ オフ|1ヶ所目
オフ オン|2ヶ所目
オン オフ|3ヶ所目
オン オン|使わない

2進数での番地は上から「00」「01」「10」になります。10進数では「0」「1」「2」です。

このように「使わない組み合わせ」が出てしまいます。

「別に、使わないなら使わないで良いじゃん」と思うかも知れませんが、これでは困る場合があります。

もし、このように「使わない組み合わせ」が存在するメモリを2個セットにしたらどうなるでしょう?

メモリ|信号1、2|場所
---+-----+----
1個目|オフ オフ|1ヶ所目
1個目|オフ オン|2ヶ所目
1個目|オン オフ|3ヶ所目
1個目|オン オン|使わない
2個目|オフ オフ|4ヶ所目
2個目|オフ オン|5ヶ所目
2個目|オン オフ|6ヶ所目
2個目|オン オン|使わない

メモリが1個目なのか2個目なのかを「オフ」「オン」で考えれば、信号線3本になったのと同じです。

1個目なのか2個目なのかを「信号0」と考えれば、表はこうなります。

信号0、1、2|場所
-------+----
オフ オフ オフ|1ヶ所目
オフ オフ オン|2ヶ所目
オフ オン オフ|3ヶ所目
オフ オン オン|使わない
オン オフ オフ|4ヶ所目
オン オフ オン|5ヶ所目
オン オン オフ|6ヶ所目
オン オン オン|使わない

2進数での番地は上から「000」「001」「010」「100」「101」「110」になります。10進数では「0」「1」「2」「4」「5」「6」です。

このように、間に隙間が空いてしまいます。

このままでは、10進数での番地に「3」が無いので「2の次だけは4」という特殊な回路が必要になってしまいます。

それだったら「使わない組み合わせ」が出ないよう、記憶出来る場所の数を3個から4個にした方が、遥かに楽です。特殊回路も要りません。

もちろん、3個以外に、5~7個でも「使わない組み合わせ」が出ます。

このように「使わない組み合わせ」が出ないようにするには、1個、2個、4個、8個、16個…と「2の倍数個」にする必要がある訳です。
    • good
    • 4

兄さんは自作パソコンとかなさってますよね。


シロウトじゃ無い事は見え見えです。
2147483648とか
8388608とか、私ら直ぐ出ますよ。
    • good
    • 0

コンピュータが電気信号を電圧の高低(0か1)で判断するからです。


だから、回路を設計するときに2進数の方が圧倒的に便利なのです。

そしてメモリ上のアドレスも2進数で表現した方が便利になり、
それはソフトウェアにも波及していきます。

ドラクエのマップが2の倍数なのも、
2進数に慣れたプログラマには管理が容易だからです。

一方、0とか1で表現しても見にくいので
1バイトという単位ができました。

これは8の倍数というよりも16の倍数ですが、
16も8の延長線上にありますから、似たようなものですね。

なお、デジタルの意味は2進数を指します。
    • good
    • 0

2進数だからということが根本にあるのですが。


メモリーをアドレッシングする線が1本増えるたびにアドレッシングできるアドレスは
倍になります。

1,2,4,8,16,32,64,128,256,512,1024
1024=1Mで
1,2,4,8M・・・・・1024M
1024M=1Gで
1,2,4,8,16G・・・・・
という具合です。

なお余談ですが18ヶ月ごとにLSIの容量が倍になるという
ムーアの法則というのが有ります。

参考URL:http://www.atmarkit.co.jp/icd/root/69/62921469.h …
    • good
    • 0

8の倍数ではなく2の乗数を使って計算します。


デジタル信号はすべて2進数を使用していますので、奇数の表現はありません。

また、1バイトは8ビット(0または1のデータが8個)になっていますので、バイトで表現すると8の倍数になるります。このため、質問文のように8の倍数であるかのような数値になります。
    • good
    • 3

正確には「2の倍数」ではなくて「2のn乗」ですね。


32は2の5乗、256は8乗です。
電気には「ON」「OFF」2通りの状態しかありませんから、
「0(OFF)」と「1(ON)」しか使わない2進数が
全ての基本にあるわけです。
    • good
    • 1

8 の倍数でなく 2 の乗数です


PC は 2 進数で処理している為
    • good
    • 0

いや、「8の倍数」というよりは「2の倍数」っていった方が正確です。


これは「電気の+(プラス)-(マイナス)の2種類でデータ表現を行う」ことに由来してます。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています