バイナリコード入門:ビットとバイトから機械語までを徹底解説
バイナリコードとは — 概要
バイナリコード(binary code)は、情報を二進法(0と1の組み合わせ)で表現する方法を指します。コンピュータ内部では電気的な状態(オン/オフ、高電位/低電位など)を2つの状態で扱うため、バイナリはもっとも自然で効率的な表現です。数値、文字、命令、画像、音声など、あらゆるデジタル情報は最終的に一連のビット(bit:binary digit)として格納・処理されます。
基本概念:ビット、バイト、桁位置
ビットは情報の最小単位で、0か1のいずれかを取ります。8ビットをまとめたものを1バイト(byte)と呼び、一般的に1バイトで0〜255(符号なし)の整数や1文字分の文字コードを表現します。二進数の桁位置は10進数と同様に重みがあり、例えば二進数の1101は 1×2^3 + 1×2^2 + 0×2^1 + 1×2^0 = 13 を表します。
数値の表現:符号なし、符号付き、二の補数
数値は用途に応じてさまざまな方法でバイナリ表現されます。
- 符号なし整数(unsigned):単純にビットを2の冪として加算。例:8ビットで11111111は255。
- 符号付き整数(two's complement:二の補数):負の数を表現する一般的な方式。nビットでは範囲が−2^(n−1)〜2^(n−1)−1。例:8ビットで5は00000101、−5はその反転11111010に1を足して11111011。
- その他の表現:符号付き絶対値表現、1の補数なども理論上存在しますが、実用面では二の補数が広く使われます。
文字やテキストのエンコーディング
文字列はバイナリに変換するために文字コードが必要です。代表的なものにASCII、UTF-8、UTF-16などがあります。ASCIIは7ビットで英数字や記号を表現し、UTF-8は可変長エンコーディングでUnicodeの全文字集合を効率的に扱えます。例えば「A」はASCIIで0x41(01000001)、UTF-8でも同じ表現ですが、日本語などはUTF-8で複数バイトになります。
浮動小数点数(IEEE 754)
小数や非常に大きい・小さい数は浮動小数点表現(IEEE 754)が一般的です。32ビット(単精度)では、1ビットの符号部、8ビットの指数部、23ビットの仮数部に分かれます。例えば1.5のIEEE 754単精度表現は、符号0、指数127(バイアス)、仮数100…0で、ビット列は0 01111111 10000000000000000000000となります。
機械語(マシンコード)とバイナリ実行ファイル
CPUが直接実行する命令もバイナリで表され、オペコード(opcode)とオペランドで構成されます。アセンブリ言語は人間に読みやすい表記にしたものをアセンブラでバイナリに変換します。実行ファイル(ELF、PEなど)はコードやデータ、メタ情報をバイナリ形式で格納します。
バイナリファイルとテキストファイルの違い
テキストファイルは文字コードに従った可読なバイト列で、通常は行や文字単位で解釈できます。一方バイナリファイルは特定のフォーマットに従う構造化データで、人がそのまま読むと意味不明なバイト列になります。画像(PNG、JPEG)、音声(MP3)、実行ファイルなどはバイナリファイルの例です。
エンディアン(バイト順序)
複数バイトを用いる数値をメモリに格納する際、バイトの並び順がシステムによって異なります。リトルエンディアン(例:0x12345678 → 78 56 34 12)とビッグエンディアン(12 34 56 78)があり、プロトコル設計やファイルフォーマットで注意が必要です。
論理ゲートと回路レベル
バイナリは論理ゲート(AND, OR, NOT, XOR など)を用いた回路で実際に処理されます。加算器やシフト回路、フリップフロップ等が組み合わさり、算術演算や状態保持が実現されます。デジタル回路の設計はブール代数に基づいています。
誤り検出・訂正とバイナリ
通信やストレージではビット誤りへ対処するため、冗長性を付加します。単純なパリティビット、チェックサム、より強力なCRC(巡回冗長検査)、および前向誤り訂正(FEC)技術(ハミング符号、リード・ソロモン等)が使われます。これらはバイナリ列に数学的操作を施して検出・訂正能力を持たせます。
実用的な読み方・扱い方
- バイナリを人間が理解するために16進表示(hex)がよく使われます。1バイト=2桁の16進。
- ツール:hexdump、xxd、objdump、strings、file などでファイルのバイナリ内容やフォーマットを解析できます。
- バイナリエディタ(hex editor)で直接編集することも可能ですが、フォーマットを壊す危険があります。
歴史的背景
二進法の考えはゴットフリート・ライプニッツ(Leibniz)まで遡り、ブール代数(George Boole)やクロード・シャノン(Claude Shannon)の情報理論によってデジタル論理と情報の定量化が確立され、現代のコンピュータ実装に結実しました。
注意点と誤解しやすい点
- 「バイナリ=機械語」と単純化されがちですが、バイナリは数値や文字、画像などあらゆるデータ表現を含む広義の概念です。
- エンディアンや文字エンコーディングを無視すると、異機種間でデータを正しく解釈できないことがあります。
まとめ
バイナリコードはコンピュータの基礎言語であり、ビットの並び方と解釈ルール(エンコーディング、表現方式)を理解することが、ソフトウェアやハードウェア、通信、データ処理を正しく扱ううえで不可欠です。基礎概念を押さえ、ツールで実際にバイナリを観察することで理解が深まります。
参考文献
- Binary number — Wikipedia
- Two's complement — Wikipedia
- IEEE 754 — Wikipedia
- ASCII — Wikipedia
- RFC 3629 — UTF-8, The Unicode Standard
- Endianness — Wikipedia
- Cyclic redundancy check — Wikipedia
- ELF (Executable and Linkable Format) — Wikipedia
- Portable Executable — Wikipedia
- Claude Shannon — Wikipedia


