|
|
Appendice C — Binaire et Hexadécimal
Les nombres en base 2 – Le binaire
Jusqu'à présent, nous nous sommes contentés d'imaginer les ordinateurs comme des machines mettant
des nombres dans des petites boîtes appelées cases mémoire, sans trop nous soucier de la façon dont cela
se passe effectivement. En gros, ça va : comme pour une voiture, vous n'avez pas besoin de savoir
comment elle fonctionne pour y monter et la conduire jusqu'à votre destination. Il arrive pourtant un moment
où quelques connaissances deviennent utiles et permettent de progresser.
Alors, comment un ordinateur stocke-t-il les nombres ? L'emplacement mémoire d'un ordinateur est,
en gros, formé de commutateurs. Il y en a des millions. Un commutateur peut avoir deux états :
en marche (« on ») ou éteint (« off »).
Un commutateur à lui seul peut donc représenter deux nombres :
0 (« off ») et 1 (« on »).
Nous combinons des groupes de commutateurs pour pouvoir stocker des nombres plus grands. Si nous prenons
deux commutateurs (appelons-les interrupteurs 0 et 1) ensemble, nous pouvons
les utiliser pour représenter 4 nombres différents parce qu'il y a quatre états uniques. Les voici :
| Interrupteur | Nombre |
| 1 | 0 | |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 2 |
| 1 | 1 | 3 |
Nous allons de droite à gauche, exactement comme si nous lisions le nombre 321 comme
cent-vingt-trois. L'interrupteur le plus bas (le plus à droite) représente 1 quand il est allumé
(« on »). L'interrupteur suivant prend la valeur 2 quand il est
(« on »). Pour obtenir le nombre représenté, ajoutons les valeurs.
Ajoutons un autre interrupteur :
| Interrupteur | Nombre |
| 2 | 1 | 0 | |
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 2 |
| 0 | 1 | 1 | 3 |
| 1 | 0 | 0 | 4 |
| 1 | 0 | 1 | 5 |
| 1 | 1 | 0 | 6 |
| 1 | 1 | 1 | 7 |
Nous pouvons maintenant représenter les nombres de 0 à 7. La première colonne
donne une valeur de 4 pour « on ». On obtient un schéma particulier ici,
en commençant avec l'interrupteur 0 :
L'inter 0 « on » vaut 1
L'inter 1 « on » vaut 2
L'inter 2 « on » vaut 4
Chaque interrupteur supplémentaire vaut deux fois la valeur du précédent. Si nous en ajoutons
un autre, sa valeur sera 8 et nous permettra de représenter les nombres de 0 à 15.
Cette méthode de compter est dite binaire (où « bi » signifie
« deux » parce que nous nous occupons de deux états). Mathématiquement,
chaque interrupteur vaut 2 à la puissance de sa position. D'où :
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
etc.
Lorsque nous parlons de nombres à 8 bits ou de nombres à 32 bits, nous faisons
référence au nombre d'interrupteurs. Les programmeurs appellent chaque interrupteur un
« bit ». Par conséquent, on voit qu'un nombre à 8 bits est capable de représenter
2^8 = 256 états. Voici ce que vaut chaque bit :
| 2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 |
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Dès que vous comprenez cela, vous comprenez que les nombres à 16 et 32 bits sont
faits de la même façon, avec simplement davantage de bits. Quelquefois, le bit le plus élevé est utilisé
pour indiquer si le nombre est négatif, plutôt que pour donner une valeur numérique. Donc, notre nombre
à 8 bits ci-dessus pourrait être utilisé pour contenir une valeur de 0 à 255
ou bien de –128 à +127, selon la convention utilisée. Le groupe de 8 bits est
un groupe si courant qu'il possède son propre nom : un octet
(« byte »). Nous avons déjà vu que
« BB4W »
possède un type de données appelé byte, aussi, dans cet exemple, le bit le plus élevé prend
une valeur numérique plutôt qu'un signe et nous pouvons stocker des nombres de 0 à 255.
Les nombres en base 16 – L'hexadécimal
Il est important de réaliser que la représentation binaire est la même chose que la représentation
décimale. La quantité physique ne change pas ; seul le moyen de représentation change. C'est la
même méthode que celle qui consiste à parler une langue étrangère. Nous pouvons dire que nous avons
« deux voitures » en français, ou bien « two cars » en anglais.
Nous pouvons dire 2 en décimal ou bien 10 en binaire, c'est toujours
la même quantité. Les quantités peuvent être représentées dans n'importe quel système numérique
qui nous convient. On dit que ces systèmes sont dans des bases différentes. La base d'un
nombre est prise dans la valeur de la deuxième colonne de la représentation.
10 en décimal = dix, donc on est en base 10
10 en binaire = deux, donc on est en base 2
En tant qu'humains, nous ne pouvons pas travailler longtemps en binaire ; tous ces 1 et
ces 0 sèment trop la confusion. Ce qu'il nous faut, c'est une façon de représenter un nombre
qui nous permette de revenir rapidement au binaire si c'est nécessaire. En regardant le schéma des valeurs
des bits en binaire (1,2,4,8,16...) nous savons que n'importe lequel de ces nombres utilisera tous les bits
et qu'il serait donc une bonne base numérique à utiliser.
• Si nous prenons le nombre qui suit 2, nous avons 4. C'est un peu mieux,
mais pas beaucoup, parce que notre séquence de nombres est maintenant 0,1,2,3,10,11, etc.
• Essayez la puissance de deux suivante, c'est 8. Cela nous permet de représenter
0,1,2,3,4,5,6,7,10,11. Ça s'améliore, et les nombres en base 8 sont utilisés dans certains cercles.
• Au nombre suivant, 16, les concepteurs d'ordinateurs et les ingénieurs ont décidé
que c'était là le nombre le plus commode. La base 16 permet la représentation des nombres
de 0 à 15 (décimal), c'est-à-dire 0000 à 1111 (binaire). Les nombres en base 16
sont appelés hexadécimaux ou, en abrégé, « hexa » : 10 en hexa,
c'est 16 en décimal et 10000 en binaire.
Comme le système décimal ne possède pas
de caractères au-delà de 9, les lettres A à F sont utilisées pour représenter
les nombres manquants de 10 à 15.
BBC BASIC
nous permet d'utiliser des nombres en hexadécimal dans notre code. Pour que le
BASIC
sache que le nombre est en base 16, nous mettons le signe « & » devant.
Pour les lettres A à F, servez-vous de capitales ;
on pourrait se servir
de minuscules, mais faisons comme tout le monde ici et utilisons les signes par défaut.
Il est possible
d'utiliser des nombres binaires en les faisant précéder du signe « % » comme
ceci : %111, %1000. Une liste complète de tous les nombres à 8 bits serait particulièrement
ennuyeuse à lire en entier, aussi en voici les caractéristiques principales :
| Décimal | Hexadécimal |
Binaire |
| 0 | &0 | %00000000 |
| 1 | &1 | %00000001 |
| 2 | &2 | %00000010 |
| 3 | &3 | %00000011 |
| 4 | &4 | %00000100 |
| 5 | &5 | %00000101 |
| 6 | &6 | %00000110 |
| 7 | &7 | %00000111 |
| 8 | &8 | %00001000 |
| 9 | &9 | %00001001 |
| 10 | &A | %00001010 |
| 11 | &B | %00001011 |
| 12 | &C | %00001100 |
| 13 | &D | %00001101 |
| 14 | &E | %00001110 |
| 15 | &F | %00001111 |
| 16 | &10 | %00010000 |
| 17 | &11 | %00010001 |
| 18 | &12 | %00010010 |
| 19 | &13 | %00010011 |
| ... | ... | ... |
| 127 | &7F | %01111111 |
| 128 | &80 | %10000000 |
| 129 | &81 | %10000001 |
| ... | ... | ... |
| 253 | &FD | %11111101 |
| 254 | &FE | %11111110 |
| 255 | &FF | %11111111 |
L'« hexa » est aussi tellement pratique en raison de sa corrélation directe avec
le binaire. Un chiffre hexa couvre toutes les combinaisons possibles de quatre bits binaires.
Le chiffre suivant répète exactement le même schéma.
L'hexa est tellement imbriqué dans les ordinateurs que
BBC BASIC
l'affichera même à notre place. Pour convertir un nombre décimal en une chaîne hexadécimale, utilisez
STR$
avec un tilde (signe
[ ~ ] ) :
PRINT STR$~(255)
Pour reconvertir un nombre hexadécimal en décimal, utilisez :
PRINT EVAL ("&FFE")
Fin de l'Appendice C
|