Was zum Hex?

Ich werde ein bisschen Wissenschaft daraus machen 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 und nach einem ungewöhnlichen Sturm auf dem roten Planeten gestrandet ist, die verstorbene Pathfinder-Sonde wiederbelebt, um mit der NASA zu kommunizieren. Während die Sonde Bilder zur Erde zurücksenden kann, kann die NASA die Position ihrer Bordkamera nur aus der Ferne mit der Sonde ändern.

Watney erkennt, dass das NASA-Team durch die 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 stellt jedoch ein anderes Problem dar. Das lateinische Alphabet hat 26 Zeichen auf Englisch, was bedeutet, dass sie in einem Kreis um die Sonde ziemlich nahe beieinander liegen müssen, und es ist sehr wahrscheinlich, 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 Hexadezimalzahlen und eine ASCII-Tabelle verwendet, um codierte 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 Mathematik betreiben, wenn Sie anfangen, Buchstaben zu verwenden.

Ich gebe zu, dass ich kaum verstehe, was sich in dieser Szene abspielte, als ich den Film zum ersten Mal sah. In einem Film mit einigen ziemlich fortgeschrittenen wissenschaftlichen Konzepten fiel mir diese Szene auf, weil es wie eine ziemlich einfache Idee schien, die mir trotzdem über den Kopf ging. Anscheinend hatte Regisseur Ridley Scott Schwierigkeiten, diese Szene darzustellen, weil er das Konzept selbst nicht vollständig verstanden hatte.

Ich lerne gerade Programmieren und habe festgestellt, dass übergeordnete Sprachen wie Ruby oder Javascript zwar schwierig zu beherrschen sind, aber dennoch weit entfernt von dem grundlegenden Maschinencode, der Computer nur mit 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 den Weg zum Entwickler eingeschlagen habe, habe ich gelernt, dass Sie jede komplexe Aktion / jedes komplexe Konzept auf eine überschaubare Größe herunterbrechen können, wenn Sie es nur Stück für Stück durchgehen.

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

Wenn Sie nun jemandem, der noch nie zuvor gerechnet hat, ein Base10-Zahlensystem erklären würden, müssten Sie zunächst erklären, warum es vorteilhaft ist, überhaupt ein numerisches System zu verwenden. Schließlich könnten wir genauso gut einen einfachen Schrägstrich ("\") verwenden, um die Anzahl der Objekte anzuzeigen. Zum Beispiel könnte ein Fisch als \ Fisch dargestellt werden, zwei Fische als \\ Fisch, drei Fische als \\\ Fisch und so weiter. Theoretisch könnten Sie jede Menge Fisch mit nur einem Zeichen darstellen. In der Praxis wird dies jedoch nicht mehr beherrschbar, 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 Base10-Dezimalsystem können wir sehr leicht eine 1000-mal größere Fischmenge als die oben genannten Schrägstriche darstellen, indem 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 würden, um diese 50 Fische oben 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 = \\\\\ \\\\

\\\\ Fisch könnte also stattdessen als 4 Fische geschrieben werden, die einen Bruchteil des Platzes einnehmen. Sobald wir eine Menge größer als 9 erreicht haben, müssen wir mit 1 beginnen und eine Platzhalterziffer 0 hinzufügen.

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

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

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

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

... 17 18 19 20 21 ...

Wir können diesem Muster bis zu 99 folgen, wobei wir das Muster erneut mit 10 und einer zusätzlichen 0: 100 beginnen können. In einem auf 10 basierenden Dezimalsystem erhöht jede zusätzliche 0 rechts die Zahl um das Zehnfache als der vorhergehende.

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

Warum also base16?

Offensichtlich ist ein System mit zehn Ziffern sehr sinnvoll, wenn Sie Ihr ganzes Leben lang eine verwendet haben, und es ist sehr intuitiv, da wir alle mit zwei Sätzen von fünf Fingern geboren sind, auf die wir zählen können (das lateinische Wort digitus bedeutet) Immerhin 'Finger'), und so sind wir es gewohnt, in Fünfergruppen ein Vielfaches von zehn zu betrachten.

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, und daher ist der gesamte Computercode grundsätzlich binär (lat. Binarius „bestehend aus zwei“). Die kleinstmögliche Gruppierung von Daten in einem Binärsystem ist ein Bit (eine Binärziffer), die in einer Gruppe von 8 organisiert werden können, die als Byte bezeichnet wird. 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 würden, würden Sie drei Ziffern benötigen.

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

Es ist also 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 mehr Symbole 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 ABCDEF

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 Dezimalzahl könnte also als A in Hex geschrieben werden, wodurch eine Ziffernstelle gespeichert wird. Sobald wir eine Menge größer als hex F (15. Dezember) erreicht haben, müssen wir mit 1 und einer Platzhalterziffer 0 von vorne beginnen.

Dez Hex 16 = 10

Um nun eine Größe größer als 16 darzustellen, z. B. 4 größer als 16 (20 in Dezimalzahl), kombinieren wir einfach die Hex-Ziffern 10 und 4, um Hex 14 zu bilden.

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

Sobald wir hex 1F (31 in Dezimalzahl) 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, bei dem wir das Muster erneut mit 10 und einem zusätzlichen 0: hexadezimal 100 (256 in Dezimalzahl) beginnen können. Jede weitere rechts hinzugefügte 0 macht die Zahl 16-mal größer als die vorhergehende.

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 empfangen kann, um 10 reduzieren und die Position der Kamera leichter erkennen.

Dieses Diagramm enthält auch Oktale.

Der von der NASA übertragene Code wird aus einer ASCII-Tabelle (links) abgeleitet, 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 Hex-Werte mit den Buchstaben des Alphabets in der Tabelle abgleichen.

48 4F 57 41 4C 49 56 45 HOWALIVE

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

Als zusätzlichen Bonus enthält die ASCII-Tabelle mit dem gesamten Platzbedarf von nur 7 Bit auch Interpunktion (!), Sodass die NASA Codezeilen übertragen kann, mit denen Watney den Sender des Pathfinder mit der leistungsstärkeren Kommunikationssoftware des Marsrovers 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 Textcodierungen verwenden 8 Bit, basieren jedoch auf dem ursprünglichen Framework, sodass das System bis heute verwendet wird. Selbst wenn Sie kein Programmierer sind, haben Sie zweifellos Hexadezimalzahlen in Ihrem Webbrowser in einer URL wie der folgenden gesehen: http://www.example.com/this%20is%20an%20example

Dabei ist% 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 Hexadezimalzahlen gesehen haben, ist die Auswahl von Farben in einer Software, die die Farbanpassung von RGB-Werten ermöglicht.

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) erzeugt, 111 Weiß (alle Farben kombiniert) und die Weitere sechs Farben ergeben sich aus den dazwischen liegenden Kombinationen.

Die Tatsache, dass Farbe nur Wellenlängendifferenzen im Licht sind, ist ein Blog-Beitrag 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, wodurch 16.777.216 (2²⁴) mögliche Farben berücksichtigt werden. Das ergibt acht bedeutungslose Ziffern in Dezimalzahl10, aber jede dieser mehr als 16 Millionen Farbkombinationen kann in einem für Menschen lesbaren Format mit nur drei Paaren hexadezimaler Ziffern 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 Hex-Wert für dunkelgelbes # 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 die Informatik für mich weniger überwältigend erscheinen lässt, alles inspiriert vom Gewinner des Jahres 2015 für die beste Komödie und / oder das beste Musical.