「chmod 755 の各桁が具体的にどのビットをON/OFFしているか、スプレッドシートで一覧にして確認したい…」
スプレッドシートでLinuxサーバーのパーミッション管理表を作っていると、8進数のパーミッション値を2進数に展開してビット単位のON/OFFを確認したくなる場面があります。たとえば「755」の7・5・5それぞれが2進数でどのビットを立てているか手計算するのは面倒ですよね。
そんなときに役立つのがGoogleスプレッドシートのOCT2BIN関数です。8進数の値を指定するだけで、2進数のビット列に変換してくれますよ。
桁数を指定してゼロ埋めできるので、3ビット固定でパーミッションビットを揃えた一覧表も作れます。Excelとも互換性があるため、ファイルをやり取りする現場でも安心して使えますね。
この記事では、OCT2BIN関数の基本から桁数指定・パーミッションビット展開・エラー対処法まで解説します。ARRAYFORMULAでの一括変換や実務の活用例にも触れていきますよ。
OCT2BIN関数とは?
OCT2BIN関数(読み方: オクト・ツー・バイン)は、8進数を2進数に変換するエンジニアリング関数です。Googleスプレッドシートに標準搭載されていて、追加設定なしで使えます。
8進数は0〜7の数字(合計8種類)で数値を表す方法です。2進数の3桁が8進数の1桁に対応するため、バイナリデータを扱うシステム管理の現場でよく使われます。UnixやLinuxのファイルパーミッション(chmod 755 など)は8進数で記述されることが多いですね。OCT2BIN関数を使えば、8進数から2進数への変換作業をスプレッドシートで自動化できますよ。
たとえば =OCT2BIN("7") と入力すると、結果は「111」です。8進数の「7」(10進数でも7)が2進数で3ビットすべてONの「111」と表されました。
関数名の由来
関数名を分解すると、次の意味になります。
- OCT = Octal(オクタル、8進数)
- 2 = to(〜へ)
- BIN = Binary(バイナリ、2進数)
つまり「OCTからBINへ」、8進数を2進数に変換するという意味がそのまま名前になっています。逆変換のBIN2OCT関数とセットで覚えると便利ですよ。
OCT2BIN関数でできること
OCT2BIN関数の特徴をまとめると、次のとおりです。
- 8進数を2進数の文字列に変換する
- 変換できる範囲は -512〜511(10進数換算、10ビット符号付き整数)
- 桁数を指定して先頭にゼロ埋めできる
- 負の数は2の補数(10ビット)で返される
- ExcelのOCT2BIN関数と仕様が同じで、ファイル共有でもそのまま動作する
NOTE
OCT2BIN関数はHEX2BIN関数(16進→2進)と変換先が同じ2進数です。変換元が8進数か16進数かの違いがありますよ。
OCT2BIN関数の書き方(構文と引数)
基本構文
=OCT2BIN(数値, [桁数])
カッコの中に、変換したい8進数と、必要に応じて桁数を指定します。桁数は省略できますよ。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値 | 必須 | 2進数に変換したい8進数(最大10文字)。-512〜511(10進数)に相当する値のみ有効 |
| 桁数 | 任意 | 結果の最小文字数(1〜10)。省略すると必要最小限の桁数で返される |
第1引数:変換する8進数
数値に指定できるのは、次の条件を満たす値だけです。
- 0〜7のみで構成された文字列(8や9を含むと #NUM! エラー)
- 変換結果が -512〜511(10進数)の範囲に収まるもの
- 正の数: 0〜777(8進数、10進数では 0〜511)
- 負の数: 7777777000〜7777777777(10桁8進数の2の補数表現)
- 範囲外は #NUM! エラー
WARNING
OCT2BIN関数に「8」や「9」を含む値を渡すと #NUM! エラーになります。8進数は0〜7の数字だけで構成されるため、「8」や「9」は8進数として無効な文字です。
第2引数:桁数(省略可)
桁数のルールは、次のとおりです。
- 1〜10の範囲で指定する
- 結果の桁数より小さい値を指定すると #NUM! エラー
- 0や負の値を指定するとエラーになる
- 負の数を変換した場合、桁数指定は無視されて常に10桁で返される
WARNING
OCT2BIN関数の戻り値は数値ではなく「文字列」です。そのまま計算に使おうとすると文字列として扱われます。2進数を10進数に戻して計算したい場合はBIN2DEC関数を使ってくださいね。
8進数と2進数の対応表
OCT2BIN関数の動きをイメージしやすくするため、1桁の8進数の対応を表にまとめました。
| 8進数 | 2進数(3桁) | 10進数 | Unixパーミッション |
|---|---|---|---|
| 0 | 000 | 0 | — |
| 1 | 001 | 1 | –x |
| 2 | 010 | 2 | -w- |
| 3 | 011 | 3 | -wx |
| 4 | 100 | 4 | r– |
| 5 | 101 | 5 | r-x |
| 6 | 110 | 6 | rw- |
| 7 | 111 | 7 | rwx |
8進数の1桁は2進数の3桁に対応します。0〜7の8つの値が、3ビットのON/OFFパターン8通りに対応しているのが基数変換の妙ですね。
Unixパーミッションの「r」は4(100)、「w」は2(010)、「x」は1(001)に対応しているのが2進数のビット列から一目でわかりますよ。
OCT2BIN関数の基本的な使い方
直接入力で変換する
もっともシンプルな使い方から見ていきましょう。
=OCT2BIN("7")
結果は「111」です。8進数の「7」が2進数で3ビットすべてONになっていることがわかります。
=OCT2BIN("5")
結果は「101」です。r-x(読み取り・実行のみ)のパーミッションパターンが確認できます。
=OCT2BIN("755")
結果は「111101101」です。chmod 755 の2進数展開がわかります。7は「111」、5は「101」、5は「101」がつながった形です。
セル参照で変換する
実務では、セルに入っている8進数を変換する場面が多いです。A2のセルに「7」が入っている場合は、次のように書きます。
=OCT2BIN(A2)
結果は「111」です。
ARRAYFORMULAで一括変換する
スプレッドシートならではの強みが、ARRAYFORMULA関数との組み合わせです。
=ARRAYFORMULA(OCT2BIN(A2:A10))
A2からA10までの8進数データを、1つの数式で一気に2進数に変換できます。
| A列: 8進数 | B列: 数式 | 結果 |
|---|---|---|
| 0 | =ARRAYFORMULA(OCT2BIN(A2:A6)) | 0 |
| 4 | ↓ | 100 |
| 5 | ↓ | 101 |
| 6 | ↓ | 110 |
| 7 | ↓ | 111 |
桁数を指定して出力する(ゼロ埋め)
OCT2BIN関数の第2引数「桁数」を使うと、出力の文字数を揃えられます。パーミッションビットの解析でとくに便利な機能ですよ。
3桁固定フォーマット出力
Unixパーミッションの1桁は3ビットに対応します。桁数に3を指定すると各ビットの位置が揃って読みやすくなります。
=OCT2BIN("4", 3)
結果は「100」です。桁数を省略すると「100」のまま変わりませんが、「0」など桁が少ない値では効果がわかります。
=OCT2BIN("0", 3)
結果は「000」です。桁数を省略すると「0」とだけ表示されますが、3を指定したことで3桁揃いになります。
| 数式 | 結果 | Unixパーミッション |
|---|---|---|
| =OCT2BIN(“7”, 3) | 111 | rwx |
| =OCT2BIN(“6”, 3) | 110 | rw- |
| =OCT2BIN(“5”, 3) | 101 | r-x |
| =OCT2BIN(“4”, 3) | 100 | r– |
| =OCT2BIN(“0”, 3) | 000 | — |
9桁固定でchmod 3桁全体を展開する
chmod 755 のような3桁パーミッション全体を9ビットで表したい場合は、桁数に9を指定します。
=OCT2BIN("755", 9)
結果は「111101101」です。3桁それぞれが3ビットずつ、合計9ビットで整列されます。
実務活用例:Unixパーミッションのビット展開
OCT2BIN関数の最も実用的な活用例が、Linuxサーバーのファイルパーミッション解析です。
パーミッション1桁をビットに展開する
chmod 644 の各桁(6・4・4)をOCT2BIN関数でビット展開すると、どのビットがONかが一目でわかります。
=OCT2BIN(MID("644",1,1), 3) → 110 (所有者: rw-)
=OCT2BIN(MID("644",2,1), 3) → 100 (グループ: r--)
=OCT2BIN(MID("644",3,1), 3) → 100 (その他: r--)
パーミッション一覧表の例
| ファイル | パーミッション | 所有者ビット | グループビット | その他ビット |
|---|---|---|---|---|
| index.html | 644 | 110 (rw-) | 100 (r–) | 100 (r–) |
| deploy.sh | 755 | 111 (rwx) | 101 (r-x) | 101 (r-x) |
| private.key | 600 | 110 (rw-) | 000 (—) | 000 (—) |
| public/ | 755 | 111 (rwx) | 101 (r-x) | 101 (r-x) |
上記の「所有者ビット」列は =OCT2BIN(MID(B2,1,1), 3) で求めています。
r/w/xの個別確認
各ビットを文字で表示したい場合は、MID関数と組み合わせます。
=IF(MID(OCT2BIN(A2, 3),1,1)="1","r","-") ← rビット
=IF(MID(OCT2BIN(A2, 3),2,1)="1","w","-") ← wビット
=IF(MID(OCT2BIN(A2, 3),3,1)="1","x","-") ← xビット
A2に「7」が入っていれば、それぞれ「r」「w」「x」と表示されます。
負の数の変換(2の補数・10ビット)
OCT2BIN関数で負の数に相当する8進数を変換すると、10桁(10文字)の2進数が返されます。
負の数に相当する8進数の変換例
=OCT2BIN("7777777777")
結果は「1111111111」(10桁すべて1)です。10ビット2の補数で -1 を表しています。
=OCT2BIN("7777777000")
結果は「1000000000」です。-512(最小値)を表しています。
| 入力(8進数) | 結果(2進数) | 10進数 |
|---|---|---|
| 7777777777 | 1111111111 | -1 |
| 7777777000 | 1000000000 | -512(最小値) |
| 777 | 111111111 | 511(最大値) |
NOTE
負の数の変換では、第2引数の桁数指定は無視されます。常に10桁で返されるため、3桁を指定しても10桁の結果になりますよ。
エラーの種類と対処法
#NUM! エラー
次のいずれかに当てはまると #NUM! エラーになります。
- 変換結果が -512〜511(10進数)の範囲外
- 桁数に 0 以下の値を指定した
- 桁数に結果の桁数より少ない値を指定した
- 8や9など8進数として無効な文字を含む値を指定した
=OCT2BIN("1000") → #NUM!(511 超えの正の値)
=OCT2BIN("8") → #NUM!(8 は8進数として無効)
=OCT2BIN("7", 1) → #NUM!(7は2進数で111(3桁)、1桁は不足)
#VALUE! エラー
桁数に数値型でない値を指定すると #VALUE! エラーになります。
=OCT2BIN("7", "a") → #VALUE!
エラー対処:IFERRORで包む
変換対象のデータが信頼できない場合は、IFERRORで包んでおくと安心です。
=IFERROR(OCT2BIN(A2, 3), "エラー")
A2に範囲外の値や無効な文字が入っていた場合でも、「エラー」と表示して処理が止まりません。
エラー防止:事前チェック
8進数として有効かどうかを事前に確認するには、REGEXMATCHが使えます。
=REGEXMATCH(TEXT(A2,"0"), "^[0-7]+$")
TRUEならOCT2BINで変換できる可能性が高いです。
OCT2BIN関数とExcelの互換性
GoogleスプレッドシートのOCT2BIN関数は、ExcelのOCT2BIN関数と仕様が同じです。構文・引数・変換ルール・エラー条件のすべてが一致しています。
ExcelファイルをGoogleスプレッドシートで開いた場合でも、OCT2BIN関数はそのまま動作します。逆にスプレッドシートで作成した数式をExcelで開いても問題ありませんよ。
OCT2シリーズ3関数の比較
OCTシリーズの変換関数(OCT2から始まる)を比較すると、変換先と扱える範囲が異なります。
| 関数 | 変換先 | 有効範囲(10進数換算) | 桁数引数 | 戻り値型 |
|---|---|---|---|---|
| OCT2BIN | 2進数 | -512〜511 | あり | テキスト |
| OCT2DEC | 10進数 | -536,870,912〜536,870,911 | なし | 数値 |
| OCT2HEX | 16進数 | -536,870,912〜536,870,911 | あり | テキスト |
OCT2DECだけが桁数引数を持たず、戻り値も数値型です。8進数を変換して計算に使いたい場合はOCT2DECが適しています。ビット列(2進数)で確認したい場合はOCT2BIN、16進数で整理したい場合はOCT2HEXを使い分けましょう。
まとめ
OCT2BIN関数は、8進数を2進数に変換するエンジニアリング関数です。
- 基本構文:
=OCT2BIN(数値, [桁数]) - 有効範囲: -512〜511(8進数で 7777777000〜777)
- 桁数を指定するとゼロ埋めで出力できる
- 負の数は常に10桁(10ビット2の補数)で返される
- Unixファイルパーミッションのビット展開で特に活用される
=OCT2BIN(A2, 3) のように3桁固定で出力するパターンは、パーミッション1桁をr/w/xのビットに展開する作業で重宝しますよ。
逆変換にはBIN2OCT関数を使います。またHEX2BIN関数(16進→2進)と組み合わせることで、さまざまな基数変換をスプレッドシート上で完結できますよ。
