Numérations octale, hexadécimale et binaire

Remarque : Vous n'avez pas besoin de comprendre complètement le contenu de cette section pour continuer votre apprentissage de Python.

Dans la leçon 36, je vous ai dit que certains messages d'erreur ou d'autres résultats inattendus pouvaient se produire si vous essayiez avec des nombres différents de ceux que j'ai essayé. Voici deux exemples :

>>> 1,023
(1, 19)

>>> 1,099
File "<input>", line 1
1, 099
^
SyntaxError: invalid token

Ce qui se produit ici est que Python interprète tout nombre qui commence par zéro comme étant un nombre octal, c'est-à-dire un nombre exprimé en base 8.

Les nombres "habituels" sont exprimés en base 10. Ils sont faits des dix symboles habituels : "0, 1, 2, 3, 4, 5, 6, 7, 8 et 9". Un nombre comme 345 est interprété comme signifiant :

345 = 3*100 + 4*10 + 5*1
ou
345 = 3*10*10 + 4*10 + 5*1
ou
345 = 3*10**2 + 4*10**1 + 5*10**0

[Si la dernière expression ne veut rien dire pour vous, cela signifie que vous avez encore des choses à apprendre en mathématiques à l'école ! Nous avons vu auparavant ce que "**" signifie.] En comparison, un nombre en base 8 est fait des huit symboles suivants : "0, 1, 2, 3, 4, 5, 6 et 7". Un nombre comme "23" (ou 023 en Python ; qui se lit "zéro"23) en base 8 signifie :

023 = 2*8 + 3*1 = 16 + 3 = 19 (en base 10)

Cela devra expliquer le premier résultat que nous avons montré ci-dessus. Le deuxième provient du fait que "9" n'est pas un symbole permis en base 8.

Confus ?... Ajoutons à votre confusion, dans l'espoir de clarifier les choses ! Python connaît aussi les nombres hexadécimaux (nombres en base 16). Ils sont habituellement écrits avec une combinaison des seize symboles suivants : "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f". Nous indiquons à Python que nous utilisons un nombre hexadécimal en le commençant par  les deux caractères "0x" (zéro suivi de x) comme suit :

>>> 0x33
51

>>> 0xa
10

>>> 0xf
15

>>> 0x10
16

>>> 0x111
273

>>> 0x123
291

Voyons si nous comprenons, en commençant par le dernier :

0x123 = 1*16*16 + 2*16 + 3*1 = 256 + 32 + 3 = 291 (en base 10)

En base 16, "a" est le 10e symbole et "f" est le 15e. Assurez-vous de vérifier que les résultats que je vous ai montré ci-dessus sont corrects !

Avant de quitter cette leçon, et particulièrement cette section, je devrais dire quelques mots concernant les nombres binaires, ou nombres exprimés en base 2. Les nombres binaires sont faits des deux symboles suivants : "0 et 1". Voici un nombre binaire et sa traduction en base 10 :

101001 = 1*2**5 + 0*2**4 + 1*2**3 + 0*2**2 + 0*2**1 + 1*2**0
ou
101001 = 1*32 + 1*8 + 1*1 = 41 (en base 10)

Les nombres binaires sont très importants ... non, ils sont essentiels pour les ordinateurs. La raison est plutôt simple à comprendre, si nous nous en tenons à une description très basique.

Pensez à une ampoule électrique et un interrupteur. Si l'interrupteur est allumé, l'ampoule donne de la lumière ; c'est parce qu'un courant électrique la traverse. Si l'interrupteur est éteint, l'ampoule ne donne pas de lumière ; aucun courant électrique ne la traverse. Il y a seulement deux possibilités. La convention habituelle est la suivante : pas de courant  = 0 ; du courant passe = 1.

Maintenant, à l'intérieur des ordinateurs, nous n'avons pas d'ampoules électriques, mais il y a des câbles et des interrupteurs miniatures [et d'autres composants électroniques qui ne sont pas importants pour notre discussion]. L'état d'un ordinateur à un certain moment peut être donné en termes de quels câbles (disons le 3e, le 5e, le 17e, ...) ont un courant qui les traverse. Cela pourrait être représenté comme une série de zéros (0 = câbles sans courant) et de uns (1 = câbles avec courant). Cet état correspond à un certain nombre... exprimé en base 2 ! Les programmes d'ordinateurs contrôlent essentiellement les minuscules interrupteurs qui font que les courants qui passent à travers les câbles de l'ordinateur changent avec le temps.

Maintenant, parce que 8 est une puissance de 2 (8=2*2*2), les nombres octaux sont une autre représentation utile des nombres naturels pour les ordinateurs. C'est aussi vrai pour les nombres hexadécimaux (16=2*2*2*2). Parce qu'ils sont plus courts à écrire (pour nous), les nombres hexadécimaux sont les plus souvent utilisés, après les nombres décimaux, par les programmeurs. Vous aurez probablement à les utiliser quand vous commencerez à écrire vos propres jeux avec Python!

home