スプレッドシートのBIN2OCT関数の使い方|2進→8進

スポンサーリンク

「2進数で記録されたシステムログを、Linuxのパーミッション設定に合わせて8進数で確認したい…」

サーバーの権限設定や組み込み機器のレジスタ値など、2進数と8進数を行き来する場面は意外と多いものです。手計算で3桁ずつ区切って変換するのは、桁数が増えるほど面倒ですよね。

そんなときに便利なのがGoogleスプレッドシートのBIN2OCT関数です。2進数のセルを指定するだけで、8進数に一発変換してくれますよ。

しかも桁数を揃えて表示できるので便利です。Unixのファイルパーミッション(755や644など)のようにフォーマットが決まっているデータも、整った形で出力できます。

この記事では、BIN2OCT関数の基本から桁数指定までまとめて解説します。符号付き2進数の扱いやエラー対処法、関連関数との使い分けにも触れていきますね。

BIN2OCT関数とは?

BIN2OCT関数(読み方: ビントゥオクト / バイナリ・トゥ・オクタル)は、2進数を8進数に変換するエンジニアリング関数です。

2進数は「0」と「1」だけで数値を表す方法です。コンピュータの内部では、すべてのデータがこの形式で処理されています。

一方、8進数は「0〜7」の8つの数字で数値を表す方法ですね。16進数と違ってA〜Fのようなアルファベットは登場しません。

2進数の3桁が8進数の1桁にちょうど対応するため、長いビット列をコンパクトに表現したいときに8進数が使われます。

たとえば =BIN2OCT("101011") と入力すると、結果は「53」です。6桁の2進数が、たった2文字の8進数になりました。

関数名の由来

関数名を分解すると、次の意味になります。

  • BIN = Binary(バイナリ、2進数)
  • 2 = to(〜へ)
  • OCT = Octal(オクタル、8進数)

つまり「BINからOCTへ」、2進数を8進数に変換するという意味がそのまま名前になっています。基数変換系の関数はすべて同じ命名ルールです。

BIN2OCT関数でできること

BIN2OCT関数の特徴をまとめると、次のとおりです。

  • 0と1で構成された2進数を8進数に変換する
  • 最大10桁(10ビット)の2進数に対応する
  • 桁数を指定して結果の文字数を揃えられる
  • 符号付き2進数(負の数)にも対応する
  • Excelとの互換性があり、ファイルのやり取りでもそのまま使える

NOTE

BIN2OCT関数はGoogleスプレッドシートのエンジニアリング関数カテゴリに属します。全バージョンで追加設定なしに利用できます。

BIN2OCT関数の書き方(構文と引数)

基本構文

=BIN2OCT(数値, [桁数])

カッコの中に、変換したい2進数と、必要に応じて桁数を指定します。桁数は省略できます。

引数の説明

引数必須/任意説明
数値必須8進数に変換したい2進数。0と1のみで構成された値を指定する
桁数任意結果の最小文字数。省略すると必要最小限の桁数で返される

引数のルール

数値に指定できるのは、次の条件を満たす値だけです。

  • 使える文字は「0」と「1」だけ
  • 最大10桁(10ビット)まで
  • 直接入力でもセル参照でもOK
  • 文字列として指定する場合はダブルクォーテーションで囲む

桁数のルールは、次のとおりです。

  • 1〜10の範囲で指定する
  • 結果の桁数より小さい値を指定するとエラーになる
  • 負の数を変換した場合、桁数指定は無視されて10桁で返される

WARNING

直接入力で =BIN2OCT(0011) のように先頭に0を付けると、スプレッドシートが10進数として解釈し、先頭の0が消えてしまうことがあります。先頭0が意味を持つ場合は "0011" と文字列で指定するのが安全です。

2進数と8進数の対応表

BIN2OCT関数の動きをイメージしやすくするため、代表的な対応を表にまとめました。

2進数8進数10進数
000
111
1022
11177
1000108
10101210
1111117763
100000010064
1100100144100
111111111777511

ポイントは「2進数の3桁が8進数の1桁にぴったり対応する」点です。たとえば6桁の2進数 101011 を考えてみましょう。

上位3桁の 101 は10進数で5、下位3桁の 011 は10進数で3です。それぞれを8進数に変換すれば 53 という形になりますよ。

TIP

この「3ビット = 1オクタル桁」の関係が、8進数がコンピュータの世界で重宝された理由です。長い2進数を区切って読みやすくする目的で、Unixのパーミッション設定などに使われ続けています。

BIN2OCT関数の基本的な使い方

2進数を直接入力する

もっともシンプルな使い方から見ていきましょう。

=BIN2OCT("1010")

結果は「12」です。2進数の 1010 は、8進数では 12 にあたります。

=BIN2OCT("111111")

結果は「77」です。6桁すべてが1の場合、8進数では 77 になります。

セル参照で2進数を変換する

実務では、セルに入っている2進数を変換する場面が多いです。A2のセルに「11001」が入っている場合、次のように書きます。

=BIN2OCT(A2)

結果は「31」です。2進数の 11001 は、8進数の 31 にあたります。

複数のセルをまとめて変換する

複数の2進数データをまとめて変換したい場合は、通常どおり数式を下方向にドラッグしてコピーすればOKです。

A列: 2進数B列: 数式結果(8進数)
1=BIN2OCT(A2)1
1010=BIN2OCT(A3)12
11001=BIN2OCT(A4)31
1100100=BIN2OCT(A5)144
111111111=BIN2OCT(A6)777

TIP

ARRAYFORMULAと組み合わせて =ARRAYFORMULA(BIN2OCT(A2:A6)) と書けば、1つの数式で範囲全体を一括変換できます。スプレッドシートならではの書き方ですね。

桁数を指定して表示を揃える

BIN2OCT関数の便利な特徴が、第2引数の「桁数」です。これを指定すると、結果の文字数を揃えられます。

桁数指定の基本

不足分は先頭に「0」が補われます。

=BIN2OCT("1010", 4)

結果は「0012」です。桁数を省略した場合は「12」とだけ表示されますが、4を指定したことで先頭に「0」が2つ追加されました。

桁数指定が役立つ場面

桁数指定はデータの一覧表を作るときに便利です。桁数がバラバラだと見づらいですよね。

数式結果説明
=BIN2OCT(“1”, 3)0013桁に揃える
=BIN2OCT(“1010”, 4)00124桁に揃える
=BIN2OCT(“111111111”, 4)07774桁に揃える

特にUnixパーミッションのように「必ず3桁で表記する」というルールがある場面では、桁数指定が活躍します。

桁数を結果より小さくするとエラー

結果の桁数より小さい値を指定するとエラーになります。

=BIN2OCT("111111111", 1)
→ #NUM! エラー

111111111 は8進数で 777(3桁)になるため、桁数1では収まりません。エラーが出たら、桁数を大きくするか省略してくださいね。

NOTE

負の数を変換した場合は、桁数指定が無視されて常に10桁で返されます。これは2の補数表現で必ず10桁が必要になるためです。

符号付き2進数(10桁の場合)の扱い方

BIN2OCT関数も、BIN2DEC関数と同じく「符号付き2進数」に対応しています。10桁の2進数を指定したときだけ、左端のビットが符号として扱われますよ。

符号ビットの仕組み

10桁の2進数では、各桁の意味が次のようになります。

10桁目(左端)9桁目〜1桁目
役割符号ビット(0=正、1=負)数値部分
例: 正の最大0111111111(10進数で511)
例: -11111111111
例: 負の最小1000000000(10進数で-512)

10桁目が「1」の場合は負の数として扱われます。結果は2の補数(負の数を表現するためのコンピュータの方式)で表現された8進数になりますよ。

符号付き2進数の変換例

具体例を見ていきましょう。

=BIN2OCT("1111111111")

結果は「7777777777」です。10桁すべてが1の場合、2の補数では -1 を表します。そのため8進数では10桁すべてが 7 になります。

=BIN2OCT("1000000000")

結果は「7777777000」です。これが10ビットの符号付き2進数で表現できる最小値(-512)の8進数表現です。

=BIN2OCT("0111111111")

結果は「777」です。こちらが正の最大値(511)の8進数表現になります。

9桁以下は符号ビットが無視される

9桁以下の2進数では、最上位が1でも正の数として扱われます。

=BIN2OCT("111111111")
→ 777(9桁なので正の数)

=BIN2OCT("11111111")
→ 377(8桁なので正の数)

同じ「1が並んだ形」でも、桁数によって結果が変わる点に注意してくださいね。

NOTE

符号付き2進数の扱いはExcelのBIN2OCT関数と完全に同じです。Googleスプレッドシートで作成した数式は、Excelにそのままコピーしても動作します。

よくあるエラーと対処法

BIN2OCT関数で発生するエラーは主に2種類です。原因と対処法を表にまとめました。

エラー原因数式の例対処法
#NUM!10桁を超える2進数を指定した=BIN2OCT(“11111111111”)10桁以内に収める
#NUM!0と1以外の文字が含まれる=BIN2OCT(“102”)0と1だけで構成する
#NUM!桁数が結果より小さい=BIN2OCT(“111111111”, 1)桁数を大きくするか省略する
#NUM!桁数に10超を指定した=BIN2OCT(“1010”, 11)桁数を1〜10の範囲で指定する
#VALUE!無効な引数を指定した=BIN2OCT(“ABC”)数値または数値文字列を指定する

#NUM!エラーの代表例

実務で一番多いのが、10進数を2進数と間違えて入力するケースです。

=BIN2OCT("102")
→ #NUM! エラー

10進数の「102」をそのまま指定してしまったパターンです。「2」は2進数では使えない文字ですね。

桁数オーバーも見落としがちです。

=BIN2OCT("11111111111")
→ #NUM! エラー

11桁を指定しているため、エラーになります。10桁以内に修正する必要があります。

IFERRORでエラー処理

大量のデータを変換する場合、元データにノイズが混ざることもありますよね。IFERROR関数(エラー時に代替値を返す関数)と組み合わせて、エラー時の表示をカスタマイズしておくと親切です。

=IFERROR(BIN2OCT(A2), "変換不可")

これでA2が2進数として無効な値でも、エラーではなく「変換不可」というメッセージが表示されます。

TIP

入力値が2進数として有効かを事前に判定したい場合は =IF(REGEXMATCH(A2, "^[01]{1,10}$"), BIN2OCT(A2), "無効") のようにREGEXMATCH関数(正規表現で文字列パターンを判定する関数)と組み合わせるのも便利です。スプレッドシートの正規表現関数が強力に働きますよ。

BIN2OCT関数の実務活用パターン

Unixファイルパーミッションの確認

8進数の代表的な活用シーンが、Linuxやmacのファイルパーミッションです。chmod 755chmod 644 のように見たことがある方も多いですよね。

パーミッションは「読み取り(r)」「書き込み(w)」「実行(x)」の3ビットで構成されます。所有者・グループ・その他の3組で計9ビットです。

=BIN2OCT("111101101")

結果は「755」です。所有者はすべて許可(rwx=7)、グループと他は読み取り・実行のみ(r-x=5)という設定ですね。

2進数(9ビット)8進数パーミッション表記説明
111101101755rwxr-xr-x一般的な実行ファイル
110100100644rw-r–r–一般的なテキストファイル
111000000700rwx——所有者のみアクセス可
111111111777rwxrwxrwx全員フルアクセス(非推奨)

ビット表現と8進数表現の対応関係を一覧で持っておくと、サーバー設定の確認がスムーズに進みます。

組み込み機器のレジスタ値解析

マイコンや組み込み機器では、レジスタの設定値を8進数で表記する文化が一部に残っています。デバッグログが2進数で出力される場合、BIN2OCTで8進数に変換しておくと、マニュアルと突き合わせやすくなりますよ。

=BIN2OCT(A2, 4)

桁数4で揃えておけば、表示が縦にきれいに揃って読みやすくなりますね。

他のBIN系関数と並べて多角的に確認

同じ2進数データを、8進数・10進数・16進数で並べて表示すると、データ全体を多角的に確認できます。

B1: =BIN2OCT(A1)   → 53
C1: =BIN2DEC(A1)   → 43
D1: =BIN2HEX(A1)   → 2B

A1に「101011」を入力すれば、3つの基数表現が同時に確認できます。検証作業や教育用途で役立ちますよ。

関連する基数変換関数との使い分け

Googleスプレッドシートには、2進数・8進数・10進数・16進数を相互に変換する関数が12種類あります。BIN2OCT関数はその1つです。

BIN2OCTの逆変換と兄弟関数

BIN2OCT関数の「入力側が2進数」「出力側が8進数」を入れ替えたり、変換先を変えたりするバリエーションがあります。

関数名変換方向用途
BIN2OCT(この記事)2進数 → 8進数パーミッションやレジスタ値の確認
BIN2DEC2進数 → 10進数2進数を人が読み慣れた10進数に変換
BIN2HEX2進数 → 16進数2進数のログをコンパクトな16進数で確認
OCT2BIN8進数 → 2進数BIN2OCTの逆変換。8進数を2進数で確認する

12種類の基数変換関数の全体像

基数変換関数の命名ルールは「変換元 + 2 + 変換先」です。対応表を頭に入れておくと、必要な関数をすぐに見つけられます。

変換元 \ 変換先2進数(BIN)8進数(OCT)10進数(DEC)16進数(HEX)
2進数(BIN)BIN2OCTBIN2DECBIN2HEX
8進数(OCT)OCT2BINOCT2DECOCT2HEX
10進数(DEC)DEC2BINDEC2OCTDEC2HEX
16進数(HEX)HEX2BINHEX2OCTHEX2DEC

たとえば「8進数を2進数に戻したい」なら、OCT(8進数)+ 2 + BIN(2進数)で「OCT2BIN関数」になります。命名ルールを覚えると、関数名で迷うことがなくなりますよ。

BIN2OCTとOCT2BINを組み合わせる

逆変換のOCT2BINと組み合わせると、変換結果を元に戻して検証できます。

=OCT2BIN(BIN2OCT(A2))

A2の2進数を8進数に変換し、さらに2進数に戻すという流れです。元の値と一致すれば、変換が正しく行われた確認になりますよ。

BIN2OCT関数をスプレッドシートで使うときのポイント

Excelとの違いはほぼない

BIN2OCT関数の仕様はExcelとGoogleスプレッドシートでほぼ同じです。引数や返り値の範囲、符号付き2進数の扱い、桁数指定のルールも共通ですよ。

既にExcelのBIN2OCT関数を使った経験があれば、スプレッドシートでもそのまま同じ感覚で使えます。ファイルをExcel形式で保存しても、BIN2OCT関数はそのまま動作しますよ。

ARRAYFORMULAで配列処理ができる

スプレッドシートならではの強みは、ARRAYFORMULA関数との組み合わせです。

=ARRAYFORMULA(BIN2OCT(A2:A100, 3))

A2からA100までの2進数データを一気に3桁の8進数に変換できます。Excelでも配列数式は使えますが、スプレッドシートのほうがシンプルに書けますね。

REGEXMATCHで入力値を検証できる

スプレッドシートは正規表現関数が充実しています。BIN2OCTの前に入力値チェックを挟むと、エラーを未然に防げます。

=IF(REGEXMATCH(A2, "^[01]{1,10}$"), BIN2OCT(A2, 3), "無効な2進数")

0と1だけで構成され、かつ10桁以内の文字列だけを変換対象にする、という数式です。大量データの前処理に便利ですね。

まとめ

BIN2OCT関数は、2進数を8進数に変換するエンジニアリング関数です。

ポイントを整理します。

  • 構文は =BIN2OCT(数値, [桁数]) で、桁数は省略可能
  • 入力は0と1だけの2進数。最大10桁まで対応
  • 桁数を指定すると、先頭に0を補って文字数を揃えられる
  • 10桁の場合は符号付き2進数として扱われ、最上位ビットが符号ビットになる
  • 負の数の場合、桁数指定は無視されて常に10桁で返される
  • #NUM!エラーの原因は「10桁超」「0と1以外の文字」「桁数不足」「桁数10超」
  • 逆変換にはOCT2BIN関数を使う
  • ExcelのBIN2OCT関数と仕様は共通で、ファイルをExcel形式で保存しても動作する

まずは =BIN2OCT("1010") で「12」が返ることを試してみてください。関数の動きがつかめたら、桁数指定や符号付き2進数も使いこなせるようになりますよ。

基数変換の姉妹記事として、スプレッドシートのBIN2DEC関数の使い方スプレッドシートのBIN2HEX関数の使い方もあわせてご覧ください。Excelでの使い方はExcelのBIN2OCT関数の使い方で詳しく解説しています。

タイトルとURLをコピーしました