t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

いろんな使われ方をする「バイナリー」という言葉の本質を探る

コンピューター用語としてよく登場するバイナリー。

実行ファイル(exe)のことをバイナリ―と呼んだり、二分探索をバイナリ―サーチと呼んだり、2進数のことをバイナリ―と呼んだり、VBAでテキストの大文字小文字を区別して比較するときのモードがバイナリー比較と呼んだりする。

一見関連なさそうなこれらの要素が「バイナリー」という同じ言葉で呼ばれているのは不思議に思われるかもしれない。

バイナリーの由来

バイナリーという言葉の由来はラテン語のbinarius(2つの)である。
したがってバイナリーという単語で呼ばれるものは何かしら「2」という数字にまつわるエピソードを持っている。

ちなみにあまり知られていないがbinaryという英単語には以下のような兄弟もいる。
0 … nullary
1 … unary
2 … binary
3 … ternary
4 … quaternary
5 … quinary
6 … senary
7 … septenary
8 … octonary
9 … novenary
10 … denary

これで二分探索と2進数がバイナリーと呼ばれるのは納得できたと思う。

実行ファイルの場合

実行ファイル(exe)はCやC++VBなどのプログラミング言語で作られる。

プログラムを書いた段階ではまだただのテキストファイルである。これをコンピューターが理解できる形に変換することをコンパイルという。

コンパイルされると実行ファイル(exe)やdllファイルが作成されるが、これは機械語で書かれている。

機械語というのは0と1の羅列、つまり2進数である。
バイナリーファイルと呼ばれたり、コンパイルしたプログラムの出力先がbinフォルダだったりするのはこれが由来である。

VBAのテキスト比較の場合

次のコードを実行すると、標準ではFalseとなる。

Sub test()
    MsgBox "a" = "A"
End Sub

小文字のaと大文字のAは別物だからだ。
これをバイナリー比較という。

次のようにOption Compare Textをモジュールの先頭に追記すると、そのモジュールはテキスト比較になり、結果はTrueとなる。

Option Compare Text
Sub test()
    MsgBox "a" = "A"
End Sub

小文字でも大文字でも同じ「エー」とみなす。
これをテキスト比較という。

いちおうOption Compare Binaryというオプションもあるが、こちらが標準なのでわざわざ書く必要はない。

コンピューター上の文字にはすべて番号が振られており、Aは65、aは97である。
内部では2進数で扱われており、これを比較して異なる文字とみなすため、バイナリー比較と呼ばれる。
65→1000001
97→1100001

バイナリーエディタについて

バイナリーエディタというツールがある。
バイナリーといいつつ、16進数を表示させているあれだ。

こちらは国内では一番有名なバイナリエディタBzEditorのスクリーンショット
f:id:t-hom:20151205093925p:plain

機械語は0と1で書かれているが、人間が扱うにあたり0と1の羅列では長すぎるし、見間違えもしやすい。
そこで、バイナリエディタはデータを16進数として扱えるようになっている。2進数4桁はちょうど16進数の1桁に対応するので利便性が良い。しかし本質的には2進数を扱っているのでバイナリーエディタと呼ばれるのである。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。