何が?

私はこれから少し科学する必要があります。

火星の早い時期(2015年)に、マットデイモンのキャラクターであるマークワトニーが乗組員によって死亡し、異常な嵐の後に赤い惑星に立ち往生し、NASAと通信するために無効なパスファインダープローブを蘇生させるシーンがあります。プローブは地球に画像を送り返すことができますが、NASAがリモートでプローブでできる最善の方法は、搭載カメラの位置を変更することです。

ワトニーは、カメラの360度の回転により、NASAチームがプローブのカメラを指すアルファベットを提供できれば、1文字ずつメッセージを綴ることができると認識しています。ただし、このソリューションには別の問題があります。ラテン系のアルファベットには英語の26文字が含まれています。つまり、プローブの周りを丸く囲む必要があり、プローブがどの文字を示しているのかを判別するのが難しい可能性が高くなります。

「アルファベットにすることはできません。 26文字と360の質問カードにより、13度の円弧が得られます。あまりにも狭いです。私はカメラが何を指しているのか決して知りませんでした…救助への16進数。」

代わりに、ワトニーは16進数とASCIIテーブルを使用してNASAからのコード化されたメッセージを解読することで問題を解決し、気付く前に彼は地球とはい/いいえの質問以上に話すことができます。

ロールクレジット

…待って、何?

文字を使い始めると、複雑な計算をしていることがわかります。

この映画を初めて見たとき、このシーンで何が起こったのか、ほとんど理解できません。いくつかの非常に高度な科学的概念を含む映画では、このシーンは私に突き刺さりました。どうやら監督のリドリー・スコットは、このシーンを自分で完全に把握していなかったため、このシーンを描くのが困難でした。

私は今プログラミングを学んでおり、RubyやJavascriptのような高レベルの言語を習得するのが難しい場合でも、1と0だけに基づいてコンピューターを動かす基本的なマシンコードからはまだかなり離れていることに気付きました。その低レベルのプログラミングは常に私を脅かしており、おそらくプログラミングがより身近な職業になる前の半生前のキャリア分野としてのコンピュータサイエンスにほとんど興味がなかった主な理由でした。しかし、6週間前に開発者としての道を歩み始めてから、少しずつステップを踏むだけで、複雑なアクション/コンセプトを管理可能なサイズに分解できることを学びました。

それでは、16進数という言葉から始めましょう。 6を意味するギリシャのヘックスから派生し、10を意味するラテンデシマスから派生した10進数を意味します。 16進数は、「通常の」10進数の場合の10の代わりに、16を基数として使用する数値システムです。

さて、これまでに算術をしたことがない人にbase10の数値システムを説明する場合、最初に数値システムを使用する方が有利な理由を最初に説明する必要があります。結局、オブジェクトの量を示すために単純なスラッシュ(「\」)を簡単に使用できます。たとえば、1匹の魚は\魚、2匹の魚は\\魚、3匹の魚は\\\魚などとして表されます。理論的には、1つのキャラクターを使用して、あらゆる量の魚を表現できます。ただし、実際には、大量の魚に遭遇すると管理が困難になります。 50匹の魚でさえ、判読できないほど長い文字列のスラッシュになります。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\魚
魚は、その多くを想像するための短期記憶スパンを持っていませんし、あなたもそうではありません。

10進法の10進法を使用すると、10分の1の数の魚を使用して、上記のスラッシュの1,000倍の量の魚を非常に簡単に表すことができます。単純なスラッシュよりも数個の記号を使用する必要がありますが、効率のトレードオフには価値があります。実際、非常に効率的であるため、上記の50匹の魚を表すには、これらのシンボルのうち2つを組み合わせれば十分です。

base10システムの数字は次のとおりです。

0 1 2 3 4 5 6 7 8 9

どこ

0 =
1 = \
2 = \\
3 = \\\
4 = \\\\
5 = \\\\\
6 = \\\\\ \
7 = \\\\\ \\
8 = \\\\\ \\\
9 = \\\\\ \\\\

したがって、\\\\ fishは、代わりに4匹のfishとして記述でき、スペースの一部を占有します。 9を超える数量に達したら、1からやり直してプレースホルダー数字0を追加する必要があります。

10 = \\\\\ \\\\\

ここで、10を超える4など、10を超える数量を表すには、10と4の数字を組み合わせて14にするだけです。

10 = \\\\\ \\\\\
4 = \\\\
14 = \\\\\ \\\\\ \\\\

再び9に達したら、繰り返して最初の桁を1増やします。

...
17
18
19
20
21
...

このパターンを最大99まで辿ることができます。この場合、10と余分な0:100でパターンを再び開始できます。前のものより。

10 * 1 = 10
10 * 10 = 100
10 * 100 = 1000
10 * 1000 = 10000
...

それではなぜbase16なのでしょうか?

10桁の数字を使用するシステムは、人生で1桁を使用している場合には非常に理にかなっています。結局のところ、「指」)、したがって、5つのグループで10の倍数を考慮することに慣れています。

コンピューターに保存されているデータに関しては、5の倍数はそれほど有用ではありません。基本的に、コンピューター回路は、オフまたはオンの2つの状態のいずれかに存在する可能性があるため、すべてのコンピューターコードは基本的にバイナリです(lat。binariusは「2つからなる」)。バイナリシステムで可能な最小のデータグループはビット(2進数)で、バイトと呼ばれる8つのグループに編成できます。 1つのビットには2つの可能な値(0または1)があるため、バイトには16の可能な状態を格納できます。

0または1(2)
0または1(4)
0または1(6)
0または1(8)
0または1(10)
0または1(12)
0または1(14)
0または1(16)

これらの8ビットのそれぞれに2つの可能な状態があるため、1バイトに格納できる合計256(2⁸)の可能な組み合わせがあります。

https://cs.stackexchange.com/questions/19568/how-can-one-byte-hold-256-possibilities

これらの256の可能な値を10進法にマップする場合、3桁が必要です。

バイナリ10進数
00000000 000
00000001 001
00000010 002
00000011 003
....
01100011 009
....
11111111 255

そのため、可能ですが、スラッシュマークで魚を数える例のように、基本単位が1バイトの場合、最も効率的なシステムではありません。 base16の10進数システムを使用すると、2バイトの16進数のみを使用して、単一バイトのあらゆるビットの組み合わせを表現できます。 10進法よりも数個の記号を使用する必要がありますが、効率と拡張性、および人間が読みやすいという意味では価値があります。

16進数は次のとおりです。

0 1 2 3 4 5 6 7 8 9 A B C D E F

どこ

12月16進数
 0 = 0
 1 = 1
 2 = 2
 3 = 3
 4 = 4
 5 = 5
 6 = 6
 7 = 7
 8 = 8
 9 = 9
10 = A
11 = B
12 = C
13 = D
14 = E
15 = F

したがって、10進数の10は16進数のAとして記述でき、桁を節約できます。 16進数のF(12月15日)を超える量に達したら、1とプレースホルダーの数字0からやり直す必要があります。

12月16進数
16 = 10

ここで、16より大きい4(10進数で20)など、16より大きい量を表すには、16進数10と4を組み合わせて16進数14にします。

12月16進数
16 = 10
 4 = 4
12月16進数
20 = 14

16進数の1F(10進数で31)に達すると、最初の数字を1つずつ繰り返して増やします。

12月16進数
...
 28 = 1D
 29 = 1E
 31 = 1F
 32 = 20
 33 = 21
 34 = 22
...

このパターンを16進FFまで続けることができ、10と余分な0:16進100(10進で256)でパターンを再び開始できます。右側に0を追加するたびに、数値は前の数値の16倍になります。

十六月
10 * 1 = 10 16 * 1 = 16
10 * 10 = 100 16 * 16 = 256
10 * 100 = 1000 16 * 256 = 4096
10 * 1000 = 10000 16 * 4096 = 65536
10 * 1000 + 1 = 10001 16 * 4096 + 1 = 65536
...

#彼を家に連れて来る

火星に戻ります-アルファベットの代わりに16進数を使用することで、マットデイモンのキャラクターは地球から受け取ることができる桁数を10桁減らし、カメラの位置をより簡単に認識できます。

このチャートにはオクタルも含まれます。

NASAが送信するコードは、0〜7F(10進数で0〜127)の各16進値(赤)が単一の文字にマッピングされるASCIIテーブル(左)から派生します。メッセージをデコードするには、Watneyがしなければならないことは、16進値を表のアルファベットの文字と一致させることだけです。

48 4F 57 41 4C 49 56 45
H O W A L I V E

これは、コンピューターがデータの読み取りと出力を行う際に、基本的にすべて行っていることです。

追加のボーナスとして、わずか7ビットですべてのスペースが提供されるASCIIテーブルには句読点(!)も含まれているため、NASAはコードの行を送信して、ワトニーがパスファインダーの送信機を火星探査機のより強力な通信ソフトウェアに接続できるようにします。救助する16進数。

元のASCII(情報交換用のアメリカ標準コード)テーブルは、1960年代に米国で開発されたもので、元々7ビットしか必要としませんでした。最新のテキストエンコーディングのほとんどは8ビットを使用しますが、元のフレームワークに基づいているため、現在でもシステムは使用されています。プログラマーでなくても、Webブラウザで次のようなURLで16進数が使用されていることは間違いありません:http://www.example.com/this%20is%20an%20example

URLは空のスペースやその他の文字を受け入れることができないため、%20(16進数20)はASCIIチャートの[スペース]文字にマッピングされます。

以前に16進数が表示されるもう1つの場所は、RGB値の色をカスタマイズできるソフトウェアで色を選択するときです。

古き良き時代。

RGBは、赤、青、緑の原色を表します。計算の初期には、3ビット(0または1)が8(3²)の可能な色の組み合わせのいずれかの値を格納できます。000は黒(色なし)を作成し、111は白(すべての色を組み合わせた)を作成し、他の6色は、その間の組み合わせから生じます。

色が光の波長の違いにすぎないという事実は、別の日のブログ投稿です。

ビット深度を8バイト(24ビット)に増やすことにより、R、G、またはBの各カラー値は256の可能なレベルを1バイトに格納でき、16,777,216(2²⁴)の可能な色が可能になります。これにより、10進数で最大8桁の無意味な数字10が追加されますが、これらの1600万を超える色の組み合わせは、3桁の16進数だけを使用して人間が読み取れる形式で記述できます。
黒=#00000
赤=#FF0000
青=#00FF00
緑=#0000FF
白= #FFFFFF

2桁の数字が繰り返される場合は数字を短縮するのが一般的であるため、濃い黄色の#FFCC00の16進値は#FC0と表記することもできます。

比較のため、10進数で16,763,904です。

この投稿で16進数がわかりやすくなることを願っています。このトピックをさらに研究することで、コンピューターサイエンスが私にとって圧倒的でなく、2015年のベストコメディーやミュージカルの受賞者に触発されたことを知っています。