Le codage des nombres entiers
dans toute la suite, sauf mention contraire, les nombres seront codés sur 1 octet (8 bits).
1. Les nombres entiers en binaire non signé
L'expression "non signé" signifie que la contrainte du signe n'existe pas : tous les nombres sont considérés comme étant positifs.
Nous avons déjà vu comment ces nombres se codaient en binaire.
Sur un octet, le nombre minimal qu'on puisse coder est 00000000
. C'est l'entier naturel 0.
Le nombre maximal qu'on puisse coder est 11111111
. C'est l'entier naturel 255.
Exercice :
- Quel est le plus grand entier non signé codable sur 16 bits ?
- ... sur 32 bits ?
- ... bits ?
Correction
- Pour tout , (formule de la somme des termes d'une suite géométrique de raison 2).
Exercice sur l'addition binaire :
- Effectuer la somme des deux nombres binaires
00001101
et00001011
. - Vérifier que le résultat est cohérent en base 10.
Correction
- Cette addition correspond à
-
Sur bits, on peut stocker entiers positifs.
-
Le plus grand entier positif que l'on peut représenter est .
-
Pour évaluer le nombres de bits minimum nécessaires pour l'écriture binaire d'un entier positifn il faut trouver la plus petite puissance de 2 qui soit strictement supérieure à l'entier à écrire.
2. Les nombres entiers en binaire signé
Comment différencier les nombres positifs des nombres négatifs ?
L'idée naturelle est de réserver 1 bit pour le signe.
Par exemple, on peut décréter que le premier bit (appelé bit de poids fort) sera le bit de signe :
- 0 pour un nombre positif
- 1 pour un nombre négatif
Dans ce cas, 00000011
serait le nombre et 10000011
serait le nombre .
- le zéro serait représenté à la fois par
00000000
et10000000
, ce qui n'est pas très économe. - plus grave : l'addition serait égale à !
Recherche de l'opposé d'un nombre :
Que faut-il ajouter au nombre pour obtenir 0 ?
Indice : en inversant chaque bit (on dit qu'on prend le complément à 2 du bit), on obtient en additionnant l'octet maximal 11111111
:
Que se passe-t-il alors si on rajoute encore 1
à ce nombre maximal ?
La retenue (en anglais carry) sera perdue car elle débordera de l'octet : seuls 8 bits sont prévus pour écrire le nombre, le 9ème bit est donc perdu.
Pour trouver l'opposé de 00000011
, il suffit donc de rajouter 1
au nombre construit par complément à 2 :
Le nombre s'écrit donc 11111101
.
remarque : ce nombre 11111101
représente 253 en codage non signé. Il est donc nécessaire, lorsqu'on représente un nombre, de savoir si les nombres manipulés seront des entiers naturels (non signés) ou bien relatifs (signés).
Méthode du complément à 2
-
Les nombres positifs sont représentés comme vu au premier chapitre mais le bit le plus fort vaut forcément zéro.
-
Les nombres négatifs sont obtenus en deux étapes:
- On inverse les bits de l'écriture binaire de sa valeur absolue. (Complément à 1)
- On ajoute 1 au nombre obtenu. C'est le complément à 2.
Exemple
Représenton le nombre sur 8 bits.
Le nombre en binaire est et donc sur 8 bits:
Son complément à 1 est
On ajoute 1, ce qui nous donne:
On a donc:
Exercice :
Donner l'écriture binaire sur un octet du nombre .
Correction
Commençons par écrire le nombre 13 en binaire. Il s'écrit 00001101
.
- en prenant le complément à 1 de chaque bit, on obtient
11110010
. - en ajoutant 1 à ce dernier nombre, on obtient
11110011
.
Le nombre s'écrit donc 11110011
.
Travail inverse : passage du binaire signé au nombre relatif
Ce sont les même méthodes.
Si le bit fort (le plus à gauche) est un 1, notre nombre est négatif et il faut faire le complément à 2, sinon il est positif et on convertit comme pour tout entier naturel.
Essayons avec 1111 1101
Méthode 1: 1111 1101 devient 0000 0010 puis on ajoute 1 donc 0000 0011, ce qui donne 3, et donc .
Méthode 2: 1111 1101 = 253 et , puisqu'il y a un 1 en bit fort, cela fait
Exercices :
- En binaire signé, à quel nombre correspond ?
- En binaire signé, quel est le plus grand nombre que l'on puisse écrire sur un octet ?
- Quel est le plus petit nombre ?
Correction
- devient puis on ajoute 1 qui donne 15 et donc
- Le plus grand nombre est
01111111
, soit . - Le nombre minimal est .