なぜ4進数は使われないのか
解決したいこと
本当に些細なふとした疑問です。
なんで4進数は使われないの?
コンピュータは2進数で動きます。
ただ、0,1の羅列は人間にはまだ早いので、8進数や16進数なども使われます。
では、なぜ4進数が使われてなかったのでしょうか?
今更使い始めることはないでしょうが、技術の進歩の過程で4進数が飛ばされて8進数が使われたのはなぜなのか疑問に思いました。
もし、ご存知の方いらっしゃいましたら教えてください!
本当に些細なふとした疑問です。
なんで4進数は使われないの?
コンピュータは2進数で動きます。
ただ、0,1の羅列は人間にはまだ早いので、8進数や16進数なども使われます。
では、なぜ4進数が使われてなかったのでしょうか?
今更使い始めることはないでしょうが、技術の進歩の過程で4進数が飛ばされて8進数が使われたのはなぜなのか疑問に思いました。
もし、ご存知の方いらっしゃいましたら教えてください!
良い着眼点ですね。
2進数(1bit)
4進数(2bit)
8進数(3bit)
16進数(4bit)
こう並べてみると、3bitよりも2bitの方がコンピュータらしい数に見えます。
今でこそ64bitのコンピュータが当たり前ですが、
昔は6bit、7bit、8bitとか当たり前にありました。
なぜ6bitだったかというと、「英数字を表すのに十分な幅だったから」です。
1bit増やすと、当時は結構なコスト増だったので最小単位に抑えたかったのです。
6bitコンピュータの数を表すのに、8進数(3bit)が2つでちょうどよかったのです。
なので、8進数が昔からある開発言語などで使えるのは当時の名残です。
現在は8bitが基本となっているので、16進数(4bit)を使うのが一般的です。
4進数(2bit)が使われないのは、「特に利用用途がないから」ですね。
@CAT_IS_ME
Questioner
大変勉強になりました!2*2ってきれいだし使いやすいかなと思っていましたが、そのような背景があったのですね。回答ありがとうございました!
初期のコンピュータ(PDP-8)のマニュアルが8進数で書かれていたためだと思います。
PDP-8は12bitコンピュータで、8命令しかないみたいです。8進数にした際1文字でなんの命令かわかるのがいいですね...
下記はwikiを引用しているサイトになります。参考になれば...
http://b67c.com/DECPDP8.html
@CAT_IS_ME
Questioner
回答ありがとうございます!そのような環境で作業されていた先人たちに頭が下がります。
1バイトが1オクテットとなり取り扱いがよかったからではないでしょうか……?
@CAT_IS_ME
Questioner
回答ありがとうございました!おっしゃる通り8がキーワードだったみたいです。
他の方も説明されてますが、4進数が使われないのは、2進数よりは短くなるものの、8進数や16進数ほど便利ではないからです。
2進数 101010
4進数 222
8進数 52
16進数 2A
また、遠い昔には12ビット・18ビット・36ビットなど、3ビットで割り切れるワード長のコンピュータが存在したため、1桁が3ビットに対応する8進数が使いやすかったのも理由でしょうね。
2進数1桁 = 1ビット
4進数1桁 = 2ビット
8進数1桁 = 3ビット ★
16進数1桁 = 4ビット
現代だと32や64ビットが主流なので、1桁が4ビット、2桁で1バイトを表せる16進数が使われています。
現在でも8進数が残っている代表例がUnixのパーミッションです。読み取り・書き込み・実行の3種類を3ビットで表すため、8進数1桁と対応します。
読み取り・書き込み・実行の3項目を、それぞれ1ビットで表しますので、
chmod 755 dir
drwxr-xr-x
みたいな形で8進数1桁が3ビットに対応するのでrwxの3つの権限を1桁で表すために8進数が使われてます。
これは因果が逆ですが、実際C言語だと、8進数は 052、16進数は 0x2A のように直接書けますが、4進数には標準リテラルが無いのですね。
int a = 052;
int b = 0x2A;
また、ビットマスクは16進数の方が読みやすいです。
uint8_t mask = 0xF0;
fは2進数の 1111に対応するため、0xf0 を見れば上位4ビットが1、下位4ビットが0とすぐ分かります。
結論で言うと、4進数は使えないのではなく、8進数や16進数と比べて表記上のメリットが小さく、あえて使う理由がなかったからかと思います。
コンピューター自体が8ビット、16ビット、32ビット、64ビットと流行ったからでは無いでしょうか。
私は30年ほど前に4ビットマイコンを目にしたことがありますが、そこでは4ビットでしたよ。かなり難しいアセンブラでした。
人間にとって「表現の短縮」が不十分だったという点もあるでしょう。
コンピュータは 0 と 1 の膨大なビット列を吐き出します。
人間は、そのような長い羅列を、そのまま理解できるほど強くありません。
そこで人間は工夫しました。
ビットを意味のある塊に分割することで、この冷たい二進数に、少しだけ人間の温度を持たせました。
3ビットずつ区切れば8進数、4ビットずつ区切れば16進数になります。
これに対して4進数は2進数をたった「2桁」ずつしかまとめられません。
2進数: 11010110 (8桁)
4進数: 3112 (4桁。2桁ずつ:11 01 01 10)
16進数: D6 (2桁。4桁ずつ:1101 0110)
4進数は、ほんの少しだけ短くします。16進数は大きく圧縮します。