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

2進数

8進数は、Unixのファイルパーミッション(chmod 755)、古いPDP時代のマニュアル、いくつかのマイコン向けツールチェーンで今も使われています。このツールは任意の2進数の文字列を右から3ビットずつまとめ、各グループを0から7までの8進数の桁に対応させます。0755を8進数リテラルとして扱う言語向けに、先頭ゼロを付けるオプションも用意しています。

2進数を8進数に変換する手順

  1. 1

    2進数の値を入力する

    空白は取り除かれます。長さは任意です。左端のグループは自動的に3ビットになるよう先頭にゼロが補われます。

  2. 2

    右から3ビットずつまとめる

    `111101100` は `111 101 100` になります。まとめる向きが重要で、常に右から左へ行います。

  3. 3

    各3ビットを対応させる

    000 = 0、001 = 1、010 = 2、そして 111 = 7 まで。各3ビットは必ず1つの8進数の桁に対応します。

  4. 4

    結果を読んでコピーする

    そのままの桁(`754`)、先頭ゼロ付き(`0754`)、または Python 3 や Rust に対応した `0o` 付き(`0o754`)から選べます。

3ビットと8進数の対応表

2進数 8進数
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

例: Unixのパーミッション

rwxr-xr-x は、所有者が読み取り・書き込み・実行の権限を持ち、グループとその他は読み取り・実行の権限を持つことを表します。2進数では 111 101 101 となり、これはそのまま8進数 755 にまとまります。chmod に渡すのとまったく同じ数値です。

8進数が役立つ場面

  • ファイルパーミッション: chmod 644umask 022stat -c %a はいずれも8進数で表します。
  • エスケープシーケンス: C言語の \100@(10進数で64)を表す8進数です。
  • 古いマシンコード: PDP-8、PDP-11、初期のDEC文書では、ワードサイズが3ビットの倍数だったため、オペコードを8進数で記載しています。
  • 見やすさ: 3ビットごとのまとまりは、16進数のように多くの文字を使わずに、2進数より速く読めます。

注意点

  • C言語では先頭ゼロが8進数を意味する: 0755 は8進数の755(= 10進数の493)、755 は10進数の755です。貼り付ける前に使っている言語を確認してください。
  • JavaScriptは旧式の8進数表記を廃止した: strictモードでは 0755 が拒否されます。代わりに 0o755 を使ってください。
  • まとめる向き: 左から右にまとめると、長さが3の倍数でないビット列では必ず誤った結果になります。

よくある質問

パーミッションのフラグが、役割(所有者・グループ・その他)ごとに3つずつ(読み取り・書き込み・実行)きれいなグループになっているからです。各3ビットは8進数の桁に1対1で対応するため、rwxr-xr-x は一手で 755 と読めます。

C言語、Perl、シェルでは先頭に 0 を付けます。Python 3、Rust、Swiftでは 0o を使います。コマンドラインの chmod では接頭辞なしで使います。

負の数には符号付きのビット幅(2の補数)が必要です。先にビット幅を指定してください。指定しない場合、このツールはすべての入力を符号なしとして扱います。

いいえ。このツールが左端のグループを3ビットになるよう先頭にゼロを補います。1111001 111 になり、8進数では 17 です。

関連ツール