SÉANCE 1
REPRÉSENTATION DES NOMBRES : ENTIERS
I Ecriture des entiers naturels dans une base . . . . 2
II Conversion d’un nombre dans une autre base . . . . 3
III Représentation des entiers positifs sur des mots de taille fixe . . . . 4
Notion de mots . . . . 4
Notion de bit . . . . 4
Nécessité d’utiliser des mots de taille fixe . . . . 4
Mots de longueur fixée . . . . 4
Addition de nombres en base 2 . . . . 5
Dépassement de capacité. . . . 5
IV Représentation des entiers signés sur des mots de taille fixe . . . . 7
V Entiers multi-précision . . . . 8
I. ECRITURE DES ENTIERS NATURELS DANS UNE BASE REPRÉSENTATION DES NOMBRES:ENTIERS
I. Ecriture des entiers naturels dans une base
Les entiers naturels que nous manipulons sont écrits enbase 10. Par exemple, 238 est une abréviation pour : 238=2×102+3×101+8×100.
Plus généralement, considéronsbÊ2 un entier.
Tout entier naturelNs’écrit sous la forme :
N=ap−1×bp−1+ap−2×bp−2+ · · · +a1×b+a0
où, pour toutk∈{0, ...,p−1},ak∈{0, ...,b−1}. On dit que les entiersa0, . . . ,ap−1 sont les chiffres deN en baseb.
On note alors :
N=ap−1. . .a1a0b. Par exemple, avecb=2, on a :
110102=1×24+1×23+0×22+1×21+0×20=2610 Lorsqueb>10, un problème se pose : quels chiffres utiliser après 9 ?
On règle le problème en utilisant des lettres majuscules.
Par exemple, en base 16, les chiffres sont 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(=10), B(=11), C(=12), D(=13), E(=14), F(=15).
Ainsi,
E3F16=14×162+3×161+15×160=364710.
Baseb Nom Chiffres Exemple Python
2 binaire 0 et 1 101012 0b101010
8 octale 0 à 7 528 0o52
10 décimale 0 à 9 42 42
16 hexadécimale 0 à 9, A à F 2A16 0x2A
Pour préciser la base utilisée, Python utilise un préfixe : Ï 0bsi l’entier est écrit en binaire ;
Ï 0osi l’entier est écrit en base 8 ; Ï 0xsi l’entier est écrit en hexadécimal.
Pour convertir un entier naturel
Ï en base 2, on peut utiliser la fonctionbin(); Ï en base 8, on peut utiliser la fonctionoct(); Ï en base 16, on peut utiliser la fonctionhex().
REPRÉSENTATION DES NOMBRES:ENTIERS II. CONVERSION D’UN NOMBRE DANS UNE AUTRE BASE
II. Conversion d’un nombre dans une autre base
Dans toute cette partie, on effectue les calculs en base 10.
SoitN∈N?. Pour déterminer l’écriture deNen baseb,
on effectue la division euclidienne deNparbjusqu’à tomber sur un quotient égal à 0.
Les chiffres deN en basebsont les restes obtenus (lus dans l’ordre inverse où ils sont apparus) Écrivons 19 en base 2 :
19 = 9×2 + 1 .
9 = 4×2 + 1 .
4 = 2×2 + 0 .
2 = 1×2 + 0 .
1 = 0×2 + 1 STOP
Donc,
19=100112. def conversion(N,b):
assert b >= 2 and N >= 1 L = []
M = N
while M != 0:
q,r = M//b, M%b L.append(r) M = q
L.reverse() # Renverse la liste L return L
print(conversion(19,2)) [1, 0, 0, 1, 1]
III. REPRÉSENTATION DES ENTIERS POSITIFS SUR DES MOTS DE TAILLE FIXE REPRÉSENTATION DES NOMBRES:ENTIERS
III. Représentation des entiers positifs sur des mots de taille fixe
Notion de mots
On considère l’alphabet composé des lettres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 On appellemotde longueurn, toute succession denlettres.
Par exemple, les entiers 9, 16, 276 et 3653 sont représentés par les mots de 4 lettres : 0009, 0016, 0276 et 3653.
Si un nombre est composé de moins denchiffres en base 10, on le complète en ajoutant des zéros.
Notion de bit
Ï La mémoire de l’ordinateur est composée d’une multitude de petits circuits électroniques qui ne peuvent être que dans deux états : sous tension et hors tension (penser à un interrupteur).
Ï bit: Binary Digit. C’est le nom donné aux états d’un petit circuit électronique. On la représente par un chiffre binaire (0 ou 1).
Ï On peut imaginer la mémoire de l’ordinateur comme une suite de cases contenant des 0 et des 1. Chaque case représente un bit.
Ï Le moyen le plus simple de stocker un entier naturel en mémoire est de stocker ses chiffres en base 2.
Nécessité d’utiliser des mots de taille fixe
Considérons la portion suivante de la mémoire de l’ordinateur :
1 0 0 1 1 0 1 1
Que doit-on lire : les entiers 10012 et 11012 écrits les uns à côté des autres, ou l’entier 100111012? Il apparaît alors nécessaire de savoir le nombre de bits utilisés pour écrire les entiers.
Mots de longueur fixée Soitn∈N?.
On dit qu’un entier naturelN peut être représenté surnbits lorsque son nombre de chiffres en base 2 est inférieur à n.
Autrement dit, il est possible de l’écrire comme un mot de longueurn(quitte à ajouter des zéros au début).
Le bit le plus à gauche est appelébit de poids fortet le bit le plus à droite est appelébit de poids faible.
Remarques:
Ï Un groupement de 8 bits est appelé unoctet.
Ï Sur la plupart des ordinateurs récents, les mots sont composés de 64 bits (paquets de 8 octets).
Exemples:
Ï On aN=251=111110112. On peut représenterN sur 8 bits et on écrit :
1 1 1 1 1 0 1 1
Ï On aN=12=11002. On peut représenter Nsur 8 bits et on écrit :
REPRÉSENTATION DES NOMBRES:ENTIERS III. REPRÉSENTATION DES ENTIERS POSITIFS SUR DES MOTS DE TAILLE FIXE
0 0 0 0 1 1 0 0
Ï L’entier 0 est représenté par :
0 0 0 0 0 0 0 0
Le plus petit entier représenté surnbits est celui où tous les bits sont nuls : 0 Le plus grand entier représenté surnbits est celui où tous les bits sont égaux à 1 :
1 . . . 12=1+2+ · · · +2n−1=2n−1.
En effet, on reconnaît une somme de termes de suites géométriques Ainsi, surnbits, il est possible d’écrire 2nentiers.
Addition de nombres en base 2
L’addition en binaire s’effectue comme en base 10saufque la retenue de 1 a lieu quand on effectue l’opération 1+1.
La musique est : Ï 0+0=0.
Ï 1+0=1.
Ï 0+1=1.
Ï 1+1=10 : il y a une retenue.
Calculons 100112+10112.
On a (les retenues sont encadrés) :
1 1
1 0 0 1 1
+ 0 1 0 1 1
1 1 1 1 0
Donc, 100112+10112=111102. On peut vérifier le résultat en revenant à la base 10.
Dépassement de capacité
On considèreN1=111110112etN2=10102. On peut représenter ces entiers sur 8 bits :
N1: 1 1 1 1 1 0 1 1 N2: 0 0 0 0 1 0 1 0 Faisons l’additionbit à bit:
0 0 0 0 0 1 0 1
et il reste une retenue qui est perdue !
En effet, la sommeN1+N2=1000001012est composée de 9 chiffres en base 2. On ne peut donc pas le représenter sur 8 bits !
En travaillant sur 8 bits, le premier 1 dans l’écriture en base 2 deN1+N2 sera perdu. On récupérera alors l’entier représenté par :
III. REPRÉSENTATION DES ENTIERS POSITIFS SUR DES MOTS DE TAILLE FIXE REPRÉSENTATION DES NOMBRES:ENTIERS
0 0 0 0 0 1 0 1
C’est à dire 5. . . Que s’est-il passé ?
En additionnant des entiers représentés surnbits, s’il y a une retenue sur le dernier bit, alors cette retenue est perdue. En effet, conserver la retenue demande un bit supplémentaire.
On parle dedépassement de capacité.
Remarques :
Ï Pour effectuer l’addition de deux nombres représentés sur nbits :
• On effectue l’addition bit à bit des deux représentations (avec la règle : 1+1=0 et je retiens 1) ;
• On laisse tomber la dernière retenue en cas de dépassement de capacité.
Ï Remarque historique: c’est un dépassement de capacité qui a causé le crash de la fusée Ariane 5 en 1996.
Ï Le typeentier positif n’existe pas en Python. Le typeintcorrespond aux entiers relatifs.
REPRÉSENTATION DES NOMBRES:ENTIERS IV. REPRÉSENTATION DES ENTIERS SIGNÉS SUR DES MOTS DE TAILLE FIXE
IV. Représentation des entiers signés sur des mots de taille fixe
Principe :
Soitn∈N? le nombre de bits disponibles. On peut représenter surnbits les entiers compris entre−2n−1 et 2n−1−1.
On dit que ce sont lesentiers signéssurnbits.
SoitN∈££
−2n−1, 2n−1−1¤¤
. Ï Si N∈££
0, 2n−1−1¤¤
, on représenteN surnbits comme un entier naturel (partie précédente).
Ï Si N∈££
−2n−1,−1¤¤
, lesnbits deNsont les chiffres de 2n+Nen base 2.
Ï Cas 1: Entiers positifs Les entiersN∈££
0, 2n−1−1¤¤
possèdent au plusn−1 chiffres en base 2. Le premier bits deN est donc 0.
−→Le bit tout à gauche d’un nombre positif ou nul est 0.
Ï Cas 2: Entiers négatifs SoitN∈££
−2n−1,−1¤¤
. On a 2n+N∈££
2n−1, 2n−1¤¤
Donc, 2n+N possède exactementnchiffres en base 2 et son écriture est de la forme : 1an−2. . .a02. Le premier bits de N est donc 1.
−→Le bit tout à gauche d’un nombre strictement négatif est 1.
Exemple (sur 8 bits)
Ï On considèreN1=3=112etN2= −4.
On aN1Ê0,N2<0 etN2+28=252=111111002. D’où, sur 8 bits, on a :
N1 : 0 0 0 0 0 0 1 1 N2 : 1 1 1 1 1 1 0 0 Ï Effectuons l’addition bit à bit :
N1+N2 : 1 1 1 1 1 1 1 1
Le bit le plus à gauche est un 1, l’entier représenté est donc négatif strictement. On le noteN. On sait alors que N+28=111111112=28−1.
Donc,N= −1. Avec cette méthode de représentation, l’addition classique et l’addition bit à bit donnent le même résultat.
Ï SiN1,N2etN1+N2appartiennent ࣣ
−2n−1, 2n−1−1¤¤
, alors la représentation en complément à 2 deN1+N2est obtenue en addition bit à bit les représentations en complément à 2 deN1et N2, même en cas de dépassement de capacité.
Ï Lorsque N1+N2 n’appartient pas à ££
−2n−1, 2n−1−1¤¤
, le résultat ne tient plus. Prendre par exemple N1=N2=2n−1−1.
V. ENTIERS MULTI-PRÉCISION REPRÉSENTATION DES NOMBRES:ENTIERS
V. Entiers multi-précision
Les processeurs des ordinateurs actuels utilisent généralement des mots de 64 bits. Avec la méthode du complément à 2, le plus grand entier signé pouvant être représenté est 263−1=9223372036854775807
Que se passe-t-il si on demande à Python d’effectuer l’opération 9223372036854775807+1 ? 9223372036854775807+1
9223372036854775808 Décevant. . .
Le langage Python a été programmé de sorte à pouvoir manipuler des entiers de taille illimitée (en fait, il y a une limite : la mémoire de l’ordinateur !).
Lorsqu’un nombre dépasse la taille maximale que le processeur peut manipuler, Python s’occupe de le découper et d’effectuer les opérations demandées.
Cependant, cela a un coût et manipuler de grands entiers peut ralentir un programme.
from time import time debut = time()
n = 0
for i in range(2000):
n = n * (2 ** i) fin = time()
print("Temps de calcul :", fin - debut) debut = time()
n = 2**180
for i in range(2000):
n = n * (2 ** i) fin = time()
print("Temps de calcul :", fin - debut) Temps de calcul : 0.003095865249633789 Temps de calcul : 2.1554622650146484