@CAT_IS_ME (猫は私。)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

なぜ4進数は使われないのか

解決したいこと

本当に些細なふとした疑問です。

なんで4進数は使われないの?

コンピュータは2進数で動きます。
ただ、0,1の羅列は人間にはまだ早いので、8進数や16進数なども使われます。
では、なぜ4進数が使われてなかったのでしょうか?
今更使い始めることはないでしょうが、技術の進歩の過程で4進数が飛ばされて8進数が使われたのはなぜなのか疑問に思いました。

もし、ご存知の方いらっしゃいましたら教えてください!

1 likes

6Answer

良い着眼点ですね。
 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)が使われないのは、「特に利用用途がないから」ですね。

4Like

Comments

  1. @CAT_IS_ME

    Questioner

    大変勉強になりました!2*2ってきれいだし使いやすいかなと思っていましたが、そのような背景があったのですね。回答ありがとうございました!

初期のコンピュータ(PDP-8)のマニュアルが8進数で書かれていたためだと思います。
PDP-8は12bitコンピュータで、8命令しかないみたいです。8進数にした際1文字でなんの命令かわかるのがいいですね...

下記はwikiを引用しているサイトになります。参考になれば...
http://b67c.com/DECPDP8.html

wiki:
https://en.wikipedia.org/wiki/PDP-8

2Like

Comments

  1. @CAT_IS_ME

    Questioner

    回答ありがとうございます!そのような環境で作業されていた先人たちに頭が下がります。

1バイトが1オクテットとなり取り扱いがよかったからではないでしょうか……?

1Like

Comments

  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進数と比べて表記上のメリットが小さく、あえて使う理由がなかったからかと思います。

1Like

コンピューター自体が8ビット、16ビット、32ビット、64ビットと流行ったからでは無いでしょうか。
私は30年ほど前に4ビットマイコンを目にしたことがありますが、そこでは4ビットでしたよ。かなり難しいアセンブラでした。

1Like

人間にとって「表現の短縮」が不十分だったという点もあるでしょう。
コンピュータは 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進数は大きく圧縮します。

0Like

Your answer might help someone💌