話題の記事

バイナリを0と1のまま解読してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。DI部の春田です。
先日までアメリカに短期留学に行っていたのですが、面白かった講義を記事にしてみました。

講師: Dr. Darren Denenberg
プロフィール: About Dr. Denenberg
※ブログで取り上げることに関して、教授から了承を得ています。

まずは、以下のスライドをご覧ください。

0と1しか書かれていないこのスライドに、英語でなんと書かれているかわかりますでしょうか?「バイナリ」と「実際の文字」との対応表があれば簡単に解読できるところを、

内容を推測してバイナリのまま読んでみようぜ

という内容です。

前提

何を指しているのか曖昧にならないように、以下のように定義します。

文字: 意味をもたない。1音素(a)、1音節(あ)
単語: 意味をもつ。(banana, バナナ)

規則性を探そう!

まずこのバイナリの規則性を探してみましょう。
スペースで区切りで「一文字」として考え、一文字ごとにどういう規則性があるかを探していきます。

まずわかることは、一文字が8桁の2進数で構成されているということですね。また、「01100001」や「01110010」など、繰り返し出てくる文字もちらほら見られます。さらに、それぞれの文字に共通しているのが、上3桁が「010」か「011」か「001」で始まっていることです。そして一単語の先頭は、必ず上3桁が「010」の文字から始まっています。

英語は、大文字小文字のアルファベット26文字で構成されています。単語の最初は大文字から書くため、「010」は大文字を表しているのではないでしょうか?
また、この8桁の2進数に規則性があるとすれば、バイナリの順番がアルファベット順に対応しているのではないかと推測することができます。

解読してみよう!

バイナリとアルファベットを対応させるために、2進数を10進数に変換してみましょう。

先ほどの推測から、上3桁は文字の形態を表しているようです。下5桁だけに注目します。
10進数5桁の数は、1の位、10の位、100の位、1,000の位、10,000の位で成り立ち、0~99,999の100,000通りを表現できます。
2進数の場合、1の位、2の位、4の位、8の位、16の位で成り立ち、00000~11111の32通りを表現できます。アルファベットは26文字なので、十分足りますね。

変換の仕方ですが、各桁に位をかけて足すだけです。まずはタイトルのコードを変換して、単語になるか確認してみましょう。

  • 01001000 の下5桁 01000
    • 0*16 + 1*8 + 0*4 + 0*2 + 0*1 = 8
  • 01100001 の下5桁 00001
    • 0*16 + 0*8 + 0*4 + 0*2 + 1*1 = 1
  • 01110010 の下5桁 10010
    • 1*16 + 0*8 + 0*4 + 1*2 + 0*1 = 18
  • 01100100 の下5桁 00100
    • 0*16 + 0*8 + 1*4 + 0*2 + 0*1 = 4
  • 01110111 の下5桁 10111
    • 1*16 + 0*8 + 1*4 + 1*2 + 1*1 = 23
  • 01100101 の下5桁 00101
    • 0*16 + 0*8 + 1*4 + 0*2 + 1*1 = 5

見事、26以内に収まっていますね。アルファベット順と対応させてみると以下のようになります。

  • 01000 ≡ 8 ≡ h
  • 00001 ≡ 1 ≡ a
  • 10010 ≡ 18 ≡ r
  • 00100 ≡ 4 ≡ d
  • 10111 ≡ 23 ≡ w
  • 00101 ≡ 5 ≡ e

上3桁「010」は大文字なので、タイトルは「Hardware」と書かれているようです。解読の方法は間違っていない様子。

では、全てのバイナリコードを10進数に変換してみましょう。
以下のスライドの[ ]内は下5桁の2進数を10進数に変化した数値です。

一つだけ上記の解読法に当てはまらない、不明な文字があります。 00100000 は上3桁からも下5桁から見てもアルファベットには当てはまりません。単語と単語の間にある記号、「スペース」を表していると考えるのが妥当でしょう。

結果、以下のように解読できました。

そのまま読めてしまうのがびっくりですね。 文字コードにあまり馴染みなかったので新鮮でした。

ASCII

上記の文字コードはASCIIと呼ばれます。 ASCIIには、7桁の2進数で表すことのできる整数の数値のそれぞれに、アルファベット・数字・記号といった「印刷可能な文字(Printable Characters)」と、マシンに指示を与えるための「制御文字(Control Characters)」が割り当てられています。 制御文字とは、例えばキーボードの[shift]キーのような、画面には表示されない文字のことです。

ASCIIの構成は非常にシンプルで、コンピューターの基本となっている文字コードです。

まとめ

今回は、ASCIIの規則性をご紹介しました。
文字数の多い日本語だとこういうことが難しいので、アメリカならではという感じですね!

※2018/10/10 一部加筆修正

参考:
ASCII - Wikipedia
アスキーコード (ASCIIコード)とは