2進数(バイナリコード)とは
コンピューターはすべてをビットとして保存しています。ビットはオフ(0)かオン(1)のどちらかの状態をとる、小さなスイッチのようなものです。8ビットで1バイトになり、1バイトで0から255までの数値を表せます。テキストは、すべての文字に番号を割り当て、その番号を2進数で保存することで記録されています。
英語のテキストの場合、その番号は ASCII で決められています。大文字の H は72で、2進数では 01001000 です。小文字の i は105で、01101001 です。この2つを並べると Hi になります。
2進数翻訳ツールの使い方
テキストを2進数に。 「テキスト」欄に入力します。「2進数」欄に、1バイトごとに8桁のグループで2進数が表示されます。「コピー」を押すと取り出せます。
2進数をテキストに。 「2進数」欄に2進数を貼り付けます。左側にテキストが表示されます。次のような形式に対応しています。
- スペース、カンマ、改行で区切ったグループ(例:
01001000 01101001) - 長さが8の倍数である、区切りなしの1本の文字列
- 先頭のゼロを省いた短いグループ(例:
1001000 1101001)
入力に問題があると、8ビットより長いグループがある、0と1以外の数字が含まれているといった内容が、欄の下のメッセージに表示されます。
「バイト間にスペース」で、出力の区切りスペースのオン・オフを切り替えられます。「クリア」を押すと両方の欄が空になります。
数値を2進数に。 2つ目のパネルは基数変換ツールです。「10進数」「2進数」「16進数」「8進数」のどれかに整数を入力すると、残りの3つが自動で埋まります。負の数にも対応しています。任意精度の整数を使っているので、電卓では表示しきれないほど大きな数も変換できます。それぞれの欄に「コピー」ボタンがあります。
変換の仕組み
テキストはまず UTF-8 のバイトに変換されます。各バイトは、左側をゼロで埋めた8桁の2進数として書き出されます。2進数を読み取るときは、その逆の手順です。数字をバイトごとに区切り、バイトを UTF-8 として読み取ります。日本語の文字は UTF-8 で3バイトになるため、たとえば あ は 11100011 10000001 10000010 の3グループになります。
数値の変換は位取りの考え方で行います。2進数では、各桁の重みが右隣の桁の2倍になります。1、2、4、8、16 という具合です。42 は 32 + 8 + 2 なので、2進数では 101010 になります。
変換例:テキストから2進数
| テキスト | 2進数 |
|---|---|
A |
01000001 |
a |
01100001 |
0 |
00110000 |
| スペース | 00100000 |
Hi |
01001000 01101001 |
é |
11000011 10101001 |
€ |
11100010 10000010 10101100 |
数字の 0 が 00000000 ではない点に注目してください。文字としての「0」には、48という独自のコードがあります。
変換例:数値から2進数
| 10進数 | 2進数 | 16進数 | 8進数 |
|---|---|---|---|
| 2 | 10 |
2 |
2 |
| 10 | 1010 |
A |
12 |
| 42 | 101010 |
2A |
52 |
| 100 | 1100100 |
64 |
144 |
| 255 | 11111111 |
FF |
377 |
| 1024 | 10000000000 |
400 |
2000 |
| 2026 | 11111101010 |
7EA |
3752 |
ヒントと制限
- できるだけスペースで区切りましょう。 区切った2進数の方が確認しやすく、1つのグループで桁が抜けても、その後ろの文字がすべてずれることがありません。
- テキストの2進数と数値の2進数は別物です。 テキストの「42」は
00110100 00110010の2バイトになります。数値の 42 は101010です。テキストには上のパネル、数値には下のパネルを使ってください。 - 全角数字にも注意しましょう。 全角の「42」は半角の「42」とは別の文字で、UTF-8 では1文字3バイトになります。数値を変換するときは半角数字で入力してください。
- 負の数は、2の補数ではなく、-10 なら
-1010のようにマイナス記号付きで表示されます。 - 2進数は秘密の暗号ではありません。 同じデータを別の書き方で表しているだけです。
そのほかの2進数変換方法
Excel と Google スプレッドシート。 =DEC2BIN(42) は 101010 を返し、=BIN2DEC("101010") は 42 を返します。Excel の DEC2BIN が扱えるのは -512 から 511 までです。それより大きな数には =BASE(2026, 2) を使ってください。
JavaScript。 (42).toString(2) で 101010 が、parseInt('101010', 2) で 42 が得られます。
Python。 format(42, '08b') で 00101010 が得られます。テキストの場合は、' '.join(format(b, '08b') for b in 'Hi'.encode()) で 01001000 01101001 になります。
関連ツール
同じバイトをもっと短い形で見るには、16進数テキスト変換を使ってください。文字によって複数のバイトを使う理由は、UTF-8 エンコードツールで確認できます。もうひとつの2種類の記号による符号を試すなら、モールス信号変換もどうぞ。