8進数っていつ使いますか?
「8進数も基数表示を明記したい」という記事を読んだのですが、
「そういえば8進数って使ったことがないな」と思いました。
16進数よりも8進数の方が都合がいいのはどのようなときでしょうか。
「8進数も基数表示を明記したい」という記事を読んだのですが、
「そういえば8進数って使ったことがないな」と思いました。
16進数よりも8進数の方が都合がいいのはどのようなときでしょうか。
「3ビットだと丁度よい」といったデータを、
一つの変数に押し込んだ際にデバッグログとかで使えそうな気がします。
無理やり例を挙げると、
5~8種類ぐらいの兵種のあるゲームを作る際、
1部隊に10人まで編成できる仕様の時とか…。
この場合、兵種が3ビットで表せるので、
1部隊(10人)に必要なビットは3×10=30となり、
32ビット型の変数に収まります。
兵種に4ビット(16進数)使うと40ビット欲しくなるので、
32ビット型の1つ上(64ビット型等)を使わないといけません。
で、最下位ビットから3ビットずつ並べたデータを1部隊とした場合、
ビット(2進数)の内容は下記のようになります。
00 101 110 100 001 000 011 101 111 101 010
(※先頭の2ビットは未使用のダミーとなります)
これが、8進数だと「5641035752」と表示されるので、
この部隊の兵種構成が「5、6、4、1、0、3、5、7、5、2」
であることが一目で分かって、ちょっと嬉しい気分になれます。
とは言え、仕様変更で「9種類目の兵種を追加します!」が怖いので、
現実的には、保険をかけて4ビット(16進数)使うほうが安全な気もします。
(※ケチケチせずに1兵種1バイトでいいじゃんって意見もあるでしょうし)
となると8進数表記の活躍の場は本当に限定されると思います。
今では8ビットの倍数系(32bit,64bit)バイトマシンが主流ですが、昔は6(3)ビットの倍数系(12bit,18bit,36bit,etc)ワードマシンも割と一般的でした。
そのワードマシンでプログラミングをする際は8進数を使用するのが都合がよいです。
※ バイト・ワードのビット数定義も公式には未定義な時代ですので、9ビット=1バイト や 16ビット=1ワード なんかもあります。
現在では歴史的経緯から、Unix系のパーミッション指定に8進数の名残が見られます。
※ 最初のUnixは DEC PDP-7 で 18ビット ワードマシンです。
chmod
でよく使います。755とか644とか、古い仕組みのレンタルサーバーは 606 とかです。
これを「グループの読み取り権限は・・・」などの言葉で書くとちょっと面倒です。
パーミッション設定以外では思い付かないです。