10進数から8進数への変換ツール

→
8進数 = 10進数を8で割り続け、余りを0-7の数字として読む

10進数から8進数へ:ファイル権限の裏に隠れた基数

この変換でわかること

10進数の数を基数8で、つまり0から7の数字だけで書き直します。8進数は使われる場面が大きく減りましたが、その数少ない用途のひとつが非常に身近です。Unixのファイル権限で、755や644といったマスクは8進数であり、1つの数ではなく3つの独立した桁として読まれます。

8進数1桁はちょうど3ビット

8進数の1桁は2進数のちょうど3桁に対応するため、9ビットの権限フィールドは所有者・グループ・その他という3つの組にきれいに分かれます。読み・書き・実行にそれぞれ4・2・1を割り当てるので、7は3つすべて、5は読みと実行を意味します。

10進数と8進数の対応表

よく使うファイルモードや小さなマスクの裏にある10進数の値です。権限の行は目で覚えておくと役立ちます。chmodは8進数で受け取り、レポートは10進数で返すことが多いからです。

10進数8進数
00
11
77
810
1012
1517
1620
3137
64100
100144
127177
200310
255377
10001750

8進数の来歴と生き残った場所

8進数はワード長が3の倍数だった頃の機械によく合い、PDP-8のような初期のミニコンはその作りでした。8ビットのバイトと16ビットのワードが標準になると、8は4で割り切れて3では割り切れないため16進数に取って代わられます。権限が生き残ったのは、9ビットという幅が3ずつにきれいに分かれるからです。

権限の桁を読み解く

モードの8進数1桁は小さな足し算として読みます。4が読み、2が書き、1が実行で、見えている数字はその合計です。755なら所有者が読み書き実行、グループとその他が読みと実行、644なら所有者が読み書きで、他は読みのみになります。

よくある質問

10進数から8進数へ手計算で変換するには?

8で割って余りを書き、商が0になるまで繰り返してから、余りを最後から順に読みます。493なら493 ÷ 8 = 61 余り 5、61 ÷ 8 = 7 余り 5、7 ÷ 8 = 0 余り 7となり、答えは755です。

ファイル権限が8進数で書かれるのはなぜですか?

利用者の区分ごとに3つの権限ビットがあり、それが8進数の1桁にちょうど収まるからです。モード全体が9ビットではなく3桁の短い数字として読めるので、755は読み書き実行、読み実行、読み実行と、計算なしで解読できます。

chmod 755 は具体的に何を許可しますか?

所有者は読み・書き・実行、グループのメンバーとその他の利用者は読みと実行ができ、書き換えはできません。10進数に直すと493です。ディレクトリでは実行ビットの意味が変わり、中に入るために必要になるため、通常は設定されます。

8進数はほかにも使われていますか?

限定的ですが使われます。先頭に0を付けて8進数のリテラルを書ける言語があり、一部のファイル形式やネットワークマスクでも見かけます。それ以外の場面では16進数に置き換わりました。1バイトが2桁の16進数にきれいに分かれる一方、3では8を割り切れないからです。

負の数や小数も変換できますか?

どちらも変換できます。負の数は8進数の桁の前にマイナス記号が付き、2の補数ではなく符号と絶対値の表記になります。小数は1桁ずつ展開し、割り切れない場合は、丸めたことに触れずに済ませず、切り捨てたことを明示します。

以下のコードをコピーしてご自身のウェブサイトに貼り付けると、この変換ツールを追加できます。

<!-- 10進数から8進数 -->
<iframe src="https://unitflow.net/ja/embed/decimal-to-octal" title="10進数から8進数" width="100%" height="420" loading="lazy" style="border:0;max-width:100%;display:block"></iframe>
<p><a href="https://unitflow.net/ja/decimal-to-octal" target="_blank" rel="noopener">UnitFlow 提供</a></p>