2進数エンコードのガイド:各ビットが何を表すか
2進数で間違えやすいのは0と1そのものではなく、その8ビットが「バイト」なのか「数」なのかを混同する点です。先にそこを決めてください。
ビットまで見たいとき
UTF-8 で中国語が3バイトになる理由、ASCII が7ビットで足りる理由、パーミッションのフラグ、仕様の第3ビットの意味。16進数では粗すぎる場面で、2進数はすべてのビットを並べてくれます。
ビット演算のデバッグにも便利です。マスクと値を両方展開すれば、AND の後にどのビットが残り、どれが消えるかが目で追えます。暗算より確実で、思い込みをすぐに検証できます。
- 文字コードとビットパターンの説明
- パーミッション、フラグ、マスクの確認
- ビット単位で定義された仕様の照合
- 1バイトの上位ビットと下位ビットの確認
8ビット1組、先頭ゼロは省略しない
各バイトは必ず8ビットで出力され、足りない分は前にゼロが付きます。01000001 は英字 A、つまり65です。先頭の0を落として 1000001 と書くと、65とも別の値とも読めてしまい、曖昧になります。
ビット順は左が最上位です。仕様に「bit 0 は右端」とある場合は右から数えてください。バイト間は空白で区切り、漢字は通常3組、絵文字は4組になります。組数が合わなければ、コピー時に欠けた可能性が高いです。
- 1バイト8ビット、先頭ゼロを補完
- 左が最上位。仕様のビット番号に注意
- 漢字3組・絵文字4組で欠落をチェック
長く、重く、暗号ではない
同じ文でも2進数は16進数の4倍の長さになり、ログではほぼ使われません。説明、ビット単位の確認、一度きりの共有に向いており、保存や転送には向きません。バイトを記録するなら16進数が実用的です。
暗号でもありません。鍵はなく、8ビットずつ読めば誰でも戻せます。また2進数が表すのはバイトであり、バイト順ではありません。多バイト整数がビッグエンディアンかは、読む側のプログラムが決めます。
- 長さは16進数の4倍
- 説明とビット確認向き、ログには不向き
- バイトを表し、バイト順は表さない
よくある質問
なぜ A は 01000001 なのですか
ASCII で A は65番目で、8ビットで書くと 01000001 になります。UTF-8 はこの範囲で ASCII と同一なので、英文は同じ表記になります。漢字はここから多バイトになります。
漢字はなぜ24ビットになるのですか
UTF-8 では常用漢字が3バイトで、1バイトは8ビットなので合計24ビットです。壊れているのではなく、デコーダも同じ区切りで戻します。
進数変換ツールとの違いは何ですか
進数変換は 255 と 0xff のような「数」を扱います。このツールは「テキスト」を扱い、各文字の UTF-8 バイトを展開します。出力が0と1でも対象が違います。
関連ツール:2進数エンコーダー