Qu'est-ce que l'hexagone?

Je vais devoir faire de la science à ce sujet.

Au début du Martian (2015), une scène où le personnage de Matt Damon, Mark Watney, présumé mort par ses coéquipiers et bloqué sur la planète rouge après une tempête anormale, ressuscitait la défunte sonde Pathfinder afin de communiquer avec la NASA. Bien que la sonde puisse envoyer des images sur Terre, la meilleure solution que la NASA puisse faire avec la sonde à distance consiste à modifier la position de la caméra embarquée.

Watney se rend compte que la rotation de 360 ​​degrés de la caméra permettrait à l’équipe de la NASA de lui épeler des messages lettre par lettre s’il pouvait leur fournir un alphabet sur lequel viser la caméra de la sonde. Cette solution pose cependant un autre problème. L’alphabet latin comporte 26 caractères anglais, ce qui signifie qu’ils doivent être assez rapprochés dans un cercle autour de la sonde et il est fort probable qu’il aura du mal à distinguer la lettre que cette sonde est censée indiquer.

«Ce ne peut pas être notre alphabet. 26 caractères plus une carte de questions sur 360 nous donnent 13 degrés d’arc. C'est trop étroit. Je ne saurais jamais ce que la caméra indiquait… Des hexadécimaux à la rescousse. ”

Donc, au lieu de cela, Watney résout le problème en utilisant des hexadécimaux et un tableau ASCII pour déchiffrer les messages codés de la NASA. Avant de le savoir, il est capable de parler à la Terre autrement que par des questions de type oui / non.

Roll crédits

…attends quoi?

Vous savez que vous faites des calculs complexes lorsque vous commencez à utiliser des lettres.

Je n’admettrai que difficilement ce qui s’est passé dans cette scène lors de la première visite du film. Dans un film avec des concepts scientifiques assez avancés, cette scène m’a traversé parce qu’elle me semblait une idée assez simple qui m’était quand même passée par-dessus la tête. Apparemment, le réalisateur Ridley Scott avait du mal à décrire cette scène car il ne comprenait pas tout le concept lui-même.

J'apprends actuellement la programmation, et je me suis rendu compte que même si les langages plus avancés, comme Ruby ou Javascript, peuvent être difficiles à maîtriser, ils sont quand même bien éloignés du code machine de base qui alimente les ordinateurs uniquement à 1 et à 0. . Ce faible niveau de programmation m'a toujours intimidé et c'est probablement la raison principale pour laquelle je n'avais que peu d'intérêt pour l'informatique en tant que domaine de carrière il y a une demi-vie, avant que la programmation ne devienne un métier plus accessible. Mais depuis que j’ai commencé à devenir développeur il ya 6 semaines, j’ai appris qu’il est possible de décomposer tout concept / action complexe en une taille raisonnable si vous n’exploitez que morceau par morceau.

Commençons donc par le mot hexadécimal. C’est dérivé de l’hex grec qui signifie 6, et de décimal, qui provient du latin decimus, qui signifie dixième. Les hexadécimaux sont un système numérique qui utilise 16 comme base, au lieu de 10 comme avec les décimales «normales».

Maintenant, si vous deviez expliquer un système de nombres base10 à une personne qui n’avait jamais fait de calcul auparavant, vous devrez d’abord expliquer pourquoi il était avantageux même d’utiliser un système numérique. Après tout, nous pourrions tout aussi facilement utiliser une simple barre oblique («\») pour indiquer les quantités d'objets. Par exemple, un poisson peut être représenté par \ fish, deux poissons par \\ poisson, trois poissons par \\\ poisson, etc. En théorie, vous pouvez représenter n'importe quelle quantité de poisson en utilisant un seul caractère. En pratique, cependant, cela devient ingérable une fois que l’on consomme de grandes quantités de poisson. Même une cinquantaine de poissons devient une longue chaîne illisible.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ poisson
Les poissons n'ont pas assez de mémoire à court terme pour en concevoir autant, et vous non plus.

En utilisant un système décimal en base10, nous pouvons très facilement représenter une quantité de poisson mille fois plus grande que les barres obliques ci-dessus en utilisant un dixième du nombre de poissons. Nous devrons utiliser quelques symboles de plus que la simple barre oblique, mais le compromis en termes d’efficacité en vaut la peine. En fait, il est si efficace que nous n'aurions besoin que de la combinaison de deux de ces symboles pour représenter les 50 poissons ci-dessus.

Les chiffres du système base10 sont:

0 1 2 3 4 5 6 7 8 9

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

Ainsi, \\\\ poisson pourrait être écrit comme 4 poissons à la place, occupant une fraction de l’espace. Une fois que nous atteignons une quantité supérieure à 9, nous devons recommencer avec 1 et ajouter un chiffre de substitution, 0.

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

Maintenant, pour représenter une quantité supérieure à 10, telle que 4 supérieure à 10, combinons simplement les chiffres 10 et 4 pour obtenir 14

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

Une fois que nous atteignons à nouveau 9, nous répétons et augmentons le premier chiffre de un.

...
17
18
19
20
21
...

Nous pouvons suivre ce modèle jusqu’à 99, où nous pouvons recommencer le modèle avec 10 et un 0: 100 supplémentaire. Ainsi, dans un système décimal basé sur 10, chaque 0 supplémentaire ajouté à droite rend le nombre 10 fois supérieur. que le précédent.

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

Alors pourquoi base16?

De toute évidence, un système qui utilise dix chiffres a beaucoup de sens si vous en avez utilisé une toute votre vie, et il est très intuitif étant donné que nous sommes tous nés avec deux jeux de cinq doigts sur lesquels compter (le mot digitus en latin signifie «doigt», après tout), et nous sommes donc habitués à considérer des multiples de dix dans des groupes de cinq.

En ce qui concerne les données stockées sur des ordinateurs, les multiples de 5 ne sont pas aussi utiles. Fondamentalement, un circuit informatique peut exister dans l'un des deux états suivants: éteint ou allumé, de sorte que tout code informatique est fondamentalement binaire (lat. Binarius «constitué de deux»). Le plus petit regroupement de données possible dans un système binaire est un bit (un chiffre binaire), qui peut être organisé en un groupe de 8 appelé octet. Puisqu'un bit peut avoir deux valeurs possibles (0 ou 1), un octet peut stocker 16 états possibles.

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

Avec chacun de ces 8 bits ayant 2 états possibles, il y a un total de 256 (2⁸) combinaisons possibles pouvant être stockées dans un seul octet.

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

Si vous deviez mapper ces 256 valeurs possibles sur un système décimal, vous auriez besoin de trois chiffres.

Décimal binaire
00000000 000
00000001 001
00000010 002
00000011 003
....
01100011 009
....
11111111 255

C’est donc possible, mais comme dans le cas du comptage de poissons avec des barres obliques, ce n’est pas le système le plus efficace si notre unité de base est constituée d’un seul octet. En utilisant un système décimal base16, nous pouvons représenter toute combinaison de bits possible d'un seul octet en utilisant seulement 2 chiffres hexadécimaux. Nous devrons utiliser un peu plus de symboles que dans le système décimal, mais pour des raisons d'efficacité, d'évolutivité et de lisibilité humaine, cela en vaut la peine.

Les chiffres hexadécimaux sont:

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

Dec 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

Ainsi, 10 en décimal pourrait être écrit en A en hexadécimal, en sauvegardant un chiffre. Une fois que nous atteignons une quantité supérieure à l'hex F (15 déc), nous devons recommencer avec 1 et un chiffre fictif, 0.

Dec Hex
16 = 10

Maintenant, pour représenter une quantité supérieure à 16, telle que 4 supérieure à 16 (20 en décimal), combinons simplement les chiffres hexadécimaux 10 et 4 pour obtenir l’hexagone 14.

Dec Hex
16 = 10
 4 = 4
Dec Hex
20 = 14

Une fois que nous atteignons l’hex 1F (31 en décimal), nous répétons et augmentons le premier chiffre d’un chiffre.

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

Nous pouvons suivre ce modèle jusqu’au format hexadécimal FF, auquel nous pouvons recommencer le modèle avec 10 et un extra 0: nombre hexadécimal 100 (256 en décimal). Chaque 0 supplémentaire ajouté à droite rend le nombre 16 fois plus grand que le précédent.

Hex Dec
10 * 1 = 10 16 * 1 = 16
10 * 10 = 100 16 * 16 = 256
10 * 100 = 1000 16 * 256 = 4096
10 * 1000 = 10 000 16 * 4096 = 65536
10 * 1000 + 1 = 10001 16 * 4096 + 1 = 65536
...

#Amène le chez lui

Revenons donc sur Mars - en utilisant des hexadécimaux au lieu des lettres de l’alphabet, le personnage de Matt Damon est capable de réduire de 10 le nombre de chiffres qu’il peut recevoir de la Terre et de reconnaître plus facilement la position de la caméra.

Ce tableau inclut également les octaux.

Le code que la NASA transmet est dérivé d'une table ASCII (à gauche) dans laquelle chaque valeur hexadécimale (en rouge) comprise entre 0 et 7F (0 à 127 en décimal) correspond à un seul caractère. Pour décoder le message, tout ce que Watney doit faire est de faire correspondre les valeurs hexadécimales aux lettres de l’alphabet dans le tableau.

48 4F 57 41 4C 49 56 45
C O M L I V E

Ce qui correspond essentiellement à tout ce qu'un ordinateur fait lorsqu'il lit et génère des données.

En prime, avec tout l'espace offert par seulement 7 bits, le tableau ASCII inclut également une ponctuation (!), Ce qui permet à la NASA de transmettre des lignes de code permettant à Watney de connecter l'émetteur du Pathfinder au logiciel de communication plus puissant du mobile Mars. . Les hexadécimaux à la rescousse.

La table originale ASCII (code américain normalisé pour l'échange d'informations) a été développée aux États-Unis dans les années 1960 et ne nécessitait à l'origine que 7 bits à stocker. La plupart des encodages de texte modernes utilisent 8 bits, mais sont basés sur la structure d'origine et le système est donc toujours utilisé. Même si vous n’êtes pas un programmeur, vous avez sans doute déjà vu des hexadécimaux utilisés dans votre navigateur Web dans une URL du type de celle-ci: http://www.example.com/this%20is%20an%20example.

où% 20 (hex 20) correspond au caractère [espace] du graphique ASCII, car les URL ne peuvent pas accepter les espaces vides ni d’autres caractères.

Les hexadécimaux sont un autre endroit où vous avez déjà vu des hexadécimaux lors du choix des couleurs dans tout logiciel permettant la personnalisation des valeurs RVB.

Les bons vieux jours.

RVB représente les couleurs primaires: rouge, bleu et vert. Aux débuts de l'informatique, trois bits (0 ou 1) pouvaient stocker la valeur de l'une des 8 combinaisons de couleurs possibles (3²), où 000 crée le noir (pas de couleur), 111 vous donne le blanc (toutes les couleurs combinées), et le les six autres couleurs résultent des combinaisons entre les deux.

Le fait que la couleur ne soit que des différences de longueur d'onde en lumière est un article de blog pour un autre jour.

En augmentant la profondeur de bits à 8 octets (24 bits), chaque valeur de couleur R, G ou B peut stocker 256 niveaux possibles dans un seul octet, ce qui permet de créer 16 777 216 (2²⁴) couleurs. Cela donne jusqu'à huit chiffres sans signification en décimal10, mais chacune de ces seize millions de combinaisons de couleurs peut être décrite dans un format lisible par l'homme à l'aide de 3 paires de chiffres hexadécimaux:
Noir = # 00000
Rouge = # FF0000
Bleu = # 00FF00
Vert = # 0000FF
Blanc = #FFFFFF

Il est de coutume d’abréger le nombre lorsque deux chiffres sont répétés. Par conséquent, la valeur hexadécimale pour le jaune foncé # FFCC00 peut également être écrite sous la forme # FC0.

C’est 16 763 904 en décimale10, à titre de comparaison.

Espérons que cet article a démystifié les hexadécimaux pour vous; Je sais que des recherches plus poussées sur ce sujet ont permis à l'informatique de sembler beaucoup moins pénible pour moi, toutes inspirées par le lauréat 2015 du meilleur film et / ou comédie musicale.