Was zum Teufel?

Ich werde den Teil davon erforschen müssen.

Es gibt eine Szene zu Beginn des Mars (2015), in der Matt Damons Charakter Mark Watney, der von seinen Crewmitgliedern für tot gehalten wird und nach einem Freak Storm auf dem roten Planeten gestrandet ist, die defekte Pathfinder-Sonde wiederbelebt, um mit der NASA zu kommunizieren. Während die Sonde Bilder zur Erde zurücksenden kann, kann die NASA die Sonde am besten aus der Ferne einsetzen, indem sie die Position ihrer Bordkamera ändert.

Watney ist bewusst, dass das NASA-Team aufgrund der 360-Grad-Drehung der Kamera Buchstaben für Buchstaben Nachrichten an ihn schreiben kann, wenn er ihnen ein Alphabet zur Verfügung stellt, auf das die Kamera der Sonde gerichtet ist. Diese Lösung ist jedoch ein weiteres Problem. Das lateinische Alphabet hat 26 Zeichen in Englisch, was bedeutet, dass sie sich in einem Kreis um die Sonde befinden müssen und es sehr wahrscheinlich ist, dass er Schwierigkeiten haben wird, zu erkennen, welchen Buchstaben die Sonde anzeigen soll.

"Es kann nicht unser Alphabet sein. 26 Zeichen plus eine Fragekarte in 360 ergeben 13 Bogengrade. Das ist viel zu eng. Ich würde nie wissen, auf was die Kamera zeigte ... Hexadezimale zur Rettung. "

Stattdessen löst Watney das Problem, indem er hexadezimale Zeichen und eine ASCII-Tabelle verwendet, um verschlüsselte Nachrichten von der NASA zu entschlüsseln. Bevor Sie es wissen, kann er in mehr als nur Ja / Nein-Fragen mit der Erde sprechen.

Roll Credits

…warte was?

Sie wissen, dass Sie komplexe mathematische Aufgaben ausführen, wenn Sie anfangen, Buchstaben zu verwenden.

Ich gebe zu, dass ich kaum verstehe, was in dieser Szene passiert ist, als ich den Film zum ersten Mal gesehen habe. In einem Film mit einigen ziemlich fortgeschrittenen wissenschaftlichen Konzepten ist mir diese Szene aufgefallen, weil es eine ziemlich einfache Idee zu sein schien, die mir dennoch in den Sinn kam. Anscheinend hatte Regisseur Ridley Scott Schwierigkeiten, diese Szene abzubilden, weil er das Konzept selbst nicht richtig verstanden hatte.

Ich lerne gerade Programmieren und mir ist klar geworden, dass höhere Sprachen wie Ruby oder Javascript zwar schwierig zu beherrschen sind, sie sich jedoch noch weit vom grundlegenden Maschinencode entfernen, der Computer nur auf der Basis von Einsen und Nullen antreibt . Dieses niedrige Programmierniveau hat mich immer eingeschüchtert und war wahrscheinlich der Hauptgrund, warum ich vor einem halben Leben wenig Interesse an Informatik als Berufsfeld hatte, bevor das Programmieren zu einem zugänglicheren Beruf wurde. Aber seit ich vor 6 Wochen angefangen habe, ein Entwickler zu sein, habe ich gelernt, dass Sie jede komplexe Aktion / Konzept auf eine überschaubare Größe herunterbrechen können, wenn Sie sie nur Stück für Stück durchgehen.

Beginnen wir also mit dem Wort hexadezimal. Es leitet sich vom griechischen Hex ab, was 6 bedeutet, und von der Dezimalzahl, die vom lateinischen Dezimus abgeleitet ist, was Zehntel bedeutet. Hexadezimale sind ein numerisches System, das 16 anstelle von 10 als Basis verwendet, wie dies bei „normalen“ Dezimalstellen der Fall ist.

Wenn Sie nun jemandem, der noch nie zuvor arithmetisch gearbeitet hat, ein Zahlensystem mit der Basis 10 erklären möchten, müssen Sie zunächst erklären, warum es vorteilhaft war, überhaupt ein numerisches System zu verwenden. Schließlich könnten wir genauso gut einen einfachen Schrägstrich ("\") verwenden, um Mengen von Objekten anzugeben. Beispielsweise kann ein Fisch als \ Fisch, zwei Fische als \ Fisch, drei Fische als \ Fisch usw. dargestellt werden. Theoretisch könnte man jede Menge Fische mit nur einem Buchstaben darstellen. In der Praxis wird dies jedoch unhandlich, sobald Sie in große Mengen Fisch geraten. Sogar fünfzig Fische werden zu unleserlich langen Schnurschnitten.

"" "" "" "" "" "" "" "" "" "" "" "" " Fisch
Fische haben nicht das Kurzzeitgedächtnis, um sich so viele vorzustellen, und Sie auch nicht.

Mit einem Dezimalsystem zur Basis 10 können wir sehr einfach eine Menge Fisch darstellen, die 1000-mal größer ist als die oben genannten Schrägstriche, wenn wir ein Zehntel der Anzahl von \ 's verwenden. Wir müssen ein paar mehr Symbole als den einen einfachen Schrägstrich verwenden, aber der Kompromiss bei der Effizienz ist es wert. Tatsächlich ist es so effizient, dass wir nur eine Kombination von zwei dieser Symbole benötigen, um diese 50 Fische darzustellen.

Die Ziffern im base10-System sind:

0 1 2 3 4 5 6 7 8 9

wo

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

Also könnte \\\\ Fisch stattdessen als 4 Fische geschrieben werden, was einen Bruchteil des Platzes einnimmt. Sobald wir eine Menge von mehr als 9 erreicht haben, müssen wir mit 1 beginnen und eine Platzhalterziffer, 0, hinzufügen.

10 =

Um eine Größe größer als 10 darzustellen, z. B. 4 größer als 10, kombinieren Sie einfach die Ziffern 10 und 4 zu 14

10 =
4 = \\\\\
14 =

Sobald wir wieder 9 erreichen, wiederholen wir nur die erste Ziffer und erhöhen sie um eins.

...
17
18
19
20
21
...

Wir können diesem Muster bis zu 99 folgen, bei dem wir das Muster erneut mit 10 und einer zusätzlichen 0: 100 beginnen können. In einem auf 10 basierenden Dezimalsystem wird die Zahl also mit jeder zusätzlichen 0, die rechts hinzugefügt wird, zehnmal größer als die vorherige.

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

Warum also base16?

Offensichtlich macht ein System mit zehn Ziffern sehr viel Sinn, wenn Sie ein System Ihr ganzes Leben lang verwendet haben, und es ist sehr intuitiv, da wir alle mit zwei Sätzen von fünf Fingern geboren wurden, auf die Sie zählen können (das Wort Digitus in Latein bedeutet) Wir sind es also gewohnt, ein Vielfaches von zehn in Fünfergruppen in Betracht zu ziehen.

Wenn es um auf Computern gespeicherte Daten geht, sind Vielfache von 5 bei weitem nicht so nützlich. Grundsätzlich kann eine Computerschaltung in einem von zwei Zuständen existieren: Aus oder Ein, so dass der gesamte Computercode grundsätzlich binär ist (lat. Binarius „bestehend aus zwei“). Die kleinstmögliche Gruppierung von Daten in einem Binärsystem ist ein Bit (eine Binärziffer), die in eine Gruppe von 8 als Byte bezeichnet werden kann. Da ein einzelnes Bit zwei mögliche Werte (0 oder 1) haben kann, kann ein Byte 16 mögliche Zustände speichern.

0 oder 1 (2)
0 oder 1 (4)
0 oder 1 (6)
0 oder 1 (8)
0 oder 1 (10)
0 oder 1 (12)
0 oder 1 (14)
0 oder 1 (16)

Mit jedem dieser 8 Bits mit 2 möglichen Zuständen gibt es insgesamt 256 (2 () mögliche Kombinationen, die in einem einzelnen Byte gespeichert werden können.

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

Wenn Sie diese 256 möglichen Werte einem Dezimalsystem zuordnen, benötigen Sie drei Ziffern.

Binäre Dezimalzahl
00000000 000
00000001 001
00000010 002
00000011 003
....
01100011 009
....
11111111 255

So ist es möglich, aber wie beim Beispiel des Zählens von Fischen mit Schrägstrichen ist es nicht das effizienteste System, wenn unsere Basiseinheit ein einzelnes Byte ist. Mit einem base16-Dezimalsystem können wir jede mögliche Bitkombination eines einzelnen Bytes mit nur 2 hexadezimalen Ziffern darstellen. Wir müssen ein paar Symbole mehr als im Dezimalsystem verwenden, aber aus Gründen der Effizienz, Skalierbarkeit und Lesbarkeit lohnt es sich.

Die hexadezimalen Ziffern sind:

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

wo

Dez Hex
 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 in Dezimal könnte also als A in Hex geschrieben werden, wobei eine Ziffernstelle gespeichert wird. Sobald wir eine Größe größer als hex F (Dez 15) erreichen, müssen wir mit 1 und einer Platzhalterziffer, 0, beginnen.

Dez Hex
16 = 10

Um eine Größe größer als 16 darzustellen, z. B. 4 größer als 16 (20 in Dezimal), kombinieren wir einfach die Hexadezimalziffern 10 und 4, um Hexadezimal 14 zu bilden.

Dez Hex
16 = 10
 4 = 4
Dez Hex
20 = 14

Sobald wir hex 1F (31 in Dezimal) erreicht haben, wiederholen wir einfach die erste Ziffer und erhöhen sie um eins.

Dez Hex
...
 28 = 1D
 29 = 1E
 31 = 1F
 32 = 20
 33 = 21
 34 = 22
...

Wir können diesem Muster bis zum hexadezimalen FF folgen, an dem wir das Muster erneut mit 10 und einer zusätzlichen 0: hex 100 (256 in Dezimal) beginnen können. Jede weitere 0 rechts erhöht die Zahl um das 16-fache.

Hex Dec
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
...

#Bring ihn heim

Zurück auf dem Mars - durch die Verwendung von Hexadezimalzahlen anstelle der Buchstaben des Alphabets kann Matt Damons Charakter die Anzahl der möglichen Ziffern, die er von der Erde erhalten kann, um 10 verringern und die Position der Kamera leichter erkennen.

Diese Tabelle enthält auch Oktale.

Der von der NASA übermittelte Code stammt aus einer ASCII-Tabelle (links), in der jeder Hexadezimalwert (in Rot) zwischen 0 und 7F (0–127 in Dezimal) einem einzelnen Zeichen zugeordnet ist. Um die Nachricht zu dekodieren, muss Watney lediglich die Hexadezimalwerte mit den Buchstaben des Alphabets in der Tabelle abgleichen.

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

Das ist im Wesentlichen alles, was ein Computer tut, wenn er Daten liest und ausgibt.

Als zusätzlichen Vorteil enthält die ASCII-Tabelle bei nur 7 Bit Platz auch Satzzeichen (!), Sodass die NASA Codezeilen übertragen kann, mit denen Watney den Pathfinder-Sender mit der leistungsstärkeren Kommunikationssoftware des Mars-Rovers verbinden kann . Hexadezimale zur Rettung.

Die ursprüngliche ASCII-Tabelle (American Standard Code for Information Interchange) wurde in den 1960er Jahren in den USA entwickelt und benötigte ursprünglich nur 7 Bit zum Speichern. Die meisten modernen Textkodierungen verwenden 8 Bit, basieren jedoch auf dem ursprünglichen Framework, sodass das System bis heute verwendet wird. Auch wenn Sie kein Programmierer sind, werden in Ihrem Webbrowser zweifellos hexadezimale Zeichen in einer URL wie der folgenden verwendet: http://www.example.com/this%20is%20an%20example

Dabei wird% 20 (hex 20) dem Zeichen [Leerzeichen] im ASCII-Diagramm zugeordnet, da URLs keine Leerzeichen und andere Zeichen akzeptieren können.

Ein weiterer Ort, an dem Sie zuvor Hexadezimalzahlen gesehen haben, ist die Auswahl von Farben in einer Software, mit der RGB-Werte farblich angepasst werden können.

Die guten alten Tage

RGB steht für die Grundfarben: Rot, Blau und Grün. In den frühen Tagen der Berechnung konnten drei Bits (0 oder 1) den Wert einer von 8 (3²) möglichen Farbkombinationen speichern, wobei 000 Schwarz (keine Farbe) ergibt, 111 Weiß (alle Farben kombiniert) ergibt und Weitere sechs Farben ergeben sich aus den dazwischen liegenden Kombinationen.

Die Tatsache, dass Farbe nur Wellenlängenunterschiede im Licht sind, ist ein Blogeintrag für einen anderen Tag.

Durch Erhöhen der Bittiefe auf 8 Byte (24 Bit) kann jeder R-, G- oder B-Farbwert 256 mögliche Ebenen in einem einzelnen Byte speichern, was 16.777.216 (2²⁴) mögliche Farben ermöglicht. Das ergibt bis zu acht bedeutungslose Ziffern in Dezimalzahl10, aber jede dieser mehr als sechzehn Millionen Farbkombinationen kann in einem für Menschen lesbaren Format mit nur drei hexadezimalen Ziffernpaaren beschrieben werden:
Schwarz = # 00000
Rot = # FF0000
Blau = # 00FF00
Grün = # 0000FF
Weiß = #FFFFFF

Es ist üblich, die Zahl abzukürzen, wenn sich zwei Ziffern wiederholen, sodass der Hexadezimalwert für dunkelgelb # FFCC00 auch als # FC0 geschrieben werden kann.

Das sind zum Vergleich 16.763.904 in Dezimalzahl10.

Hoffentlich hat dieser Beitrag Hexadezimalzahlen für Sie entmystifiziert. Ich weiß, dass die weitere Erforschung dieses Themas dazu geführt hat, dass die Informatik für mich weniger überwältigend zu sein scheint, alle inspiriert vom Gewinner des Jahres 2015 für die beste Komödie und / oder das beste Musical.