KlarIA
💻 NSI (spécialité)1ereCours

Représentation des entiers : bases et binaire

📖

Cours

Représentation des entiers : bases et binaire

Un ordinateur ne connaît que deux états : courant ou pas, aimanté ou non, 00 ou 11.

Toute donnée (nombre, texte, image, son) doit donc être traduite en suites de bits.

Ce chapitre commence par les entiers : comment les écrire en base 22 (binaire) et en base 1616 (hexadécimal), combien de bits il faut pour les écrire, et comment représenter les entiers relatifs grâce au complément à 2.

1. Écrire un entier dans une base

1.1 Le principe positionnel

En base 1010, le nombre 40724\,072 signifie 4×103+0×102+7×101+2×1004 \times 10^3 + 0 \times 10^2 + 7 \times 10^1 + 2 \times 10^0.

Chaque chiffre est multiplié par une puissance de la base, qui dépend de sa position.

BaseNomChiffres
22binaire00 et 11
1010décimal00 à 99
1616hexadécimal00 à 99, puis A, B, C, D, E, F pour 1010 à 1515

1.2 De la base 2 à la base 10

On additionne les puissances de 22 qui correspondent aux bits à 11.

101101012=128+32+16+4+1=181.\overline{1011\,0101}^{\,2} = 128 + 32 + 16 + 4 + 1 = 181.

Correction · Pourquoi

n = 2 * n + int(c) ?
Lire un bit de plus, c'est décaler tout ce qu'on a déjà lu d'un rang vers la gauche, donc le multiplier par 22, puis ajouter le nouveau bit.
Une autre solution, plus proche de la définition, parcourt les index et ajoute 2 ** (len(s) - 1 - i) quand s[i] vaut "1".

1.3 De la base 10 à la base 2 : les divisions successives

DivisionQuotientReste
45=2×22+145 = 2 \times 22 + 1222211
22=2×11+022 = 2 \times 11 + 0111100
11=2×5+111 = 2 \times 5 + 15511
5=2×2+15 = 2 \times 2 + 12211
2=2×1+02 = 2 \times 1 + 01100
1=2×0+11 = 2 \times 0 + 10011

Donc 45=101101245 = \overline{101101}^{\,2}. Vérification : 32+8+4+1=4532 + 8 + 4 + 1 = 45.

Le programme suit exactement la méthode des divisions, et affiche chaque étape.

Python possède aussi des fonctions toutes faites.

>>> bin(45)
'0b101101'
>>> int("101101", 2)
45

Le préfixe 0b signale une écriture binaire.

1.4 La base 16 : l'hexadécimal

10110101210112=11=B, 01012=5181=B516.\overline{1011\,0101}^{\,2} \to \overline{1011}^{\,2} = 11 = \text{B},\ \overline{0101}^{\,2} = 5 \quad\Rightarrow\quad 181 = \overline{\text{B5}}^{\,16}.

BinaireHexaBinaireHexaBinaireHexaBinaireHexa
00000000001000100410001000811001100C
00010001101010101510011001911011101D
00100010201100110610101010A11101110E
00110011301110111710111011B11111111F

L'hexadécimal sert à écrire de façon compacte des contenus binaires : couleurs, adresses mémoire, adresses MAC, codes Unicode.

2. Combien de bits ?

2.1 Nombre de bits d'un entier

TailleValeurs non signéesNom courantUsage
88 bits00 à 255255octetcaractère, composante de couleur
1616 bits00 à 6553565\,535mot courtéchantillon audio, coordonnées
3232 bits00 à 42949672954\,294\,967\,295entier standardcompteurs, adresses IPv4, int du langage C
6464 bits00 à environ 1,8×10191{,}8 \times 10^{19}entier longtailles de fichiers, horodatages

Un octet (byte) vaut 88 bits. Les préfixes : 11 ko =103= 10^3 octets, 11 Mo =106= 10^6, 11 Go =109= 10^9. À ne pas confondre avec 11 Kio =210=1024= 2^{10} = 1\,024 octets.

2.2 Somme et produit

Par exemple, 255+255=510<512=29255 + 255 = 510 < 512 = 2^9, et 255×255=65025<65536=216255 \times 255 = 65\,025 < 65\,536 = 2^{16}.

Python, lui, manipule des entiers de taille arbitraire : il n'y a pas de débordement, la mémoire s'adapte. Ce n'est pas le cas de la plupart des langages (C, Java), où un int occupe 3232 bits.

2.3 Addition binaire

On additionne colonne par colonne, avec retenue, comme en base 1010.

   1 1 1 1 1 1     (retenues)
   0 1 0 1 1 0 1   = 45
 + 0 0 1 1 0 1 1   = 27
 ---------------
   1 0 0 1 0 0 0   = 72

3. Les entiers relatifs : le complément à 2

3.1 Le problème du signe

Pour représenter des entiers négatifs, l'idée naïve est de réserver un bit de signe (00 pour ++, 11 pour -), suivi de la valeur absolue.

Elle a deux défauts : elle donne deux zéros (+0+0 et 0-0), et elle complique l'addition.

Les processeurs utilisent une autre représentation : le complément à 2.

3.2 Le principe

Sur 88 bits, les poids sont donc 128,64,32,16,8,4,2,1-128, 64, 32, 16, 8, 4, 2, 1.

  • 001001012=32+4+1=37\overline{0010\,0101}^{\,2} = 32 + 4 + 1 = 37
  • 110110112=128+64+16+8+2+1=37\overline{1101\,1011}^{\,2} = -128 + 64 + 16 + 8 + 2 + 1 = -37

3.3 Calculer l'opposé

37=001001012inversion110110102+1110110112=37.37 = \overline{0010\,0101}^{\,2} \xrightarrow{\text{inversion}} \overline{1101\,1010}^{\,2} \xrightarrow{+1} \overline{1101\,1011}^{\,2} = -37.

La même opération redonne 3737 à partir de 37-37.

Essaie les valeurs extrêmes sur 88 bits : 127127, 128-128, puis 1-1. Que donne 128128, qui n'est pas représentable ?

3.4 Un même motif, deux lectures

Le motif 110110112\overline{1101\,1011}^{\,2} vaut 219219 si on le lit comme un entier non signé, et 37-37 si on le lit comme un entier signé.

4. Exemple résolu pas à pas

Correction · Question a

202=2×101+0202 = 2 \times 101 + 0 ; 101=2×50+1101 = 2 \times 50 + 1 ; 50=2×25+050 = 2 \times 25 + 0 ; 25=2×12+125 = 2 \times 12 + 1.
12=2×6+012 = 2 \times 6 + 0 ; 6=2×3+06 = 2 \times 3 + 0 ; 3=2×1+13 = 2 \times 1 + 1 ; 1=2×0+11 = 2 \times 0 + 1.
Restes lus de bas en haut : 202=110010102202 = \overline{1100\,1010}^{\,2}. Vérification : 128+64+8+2=202128 + 64 + 8 + 2 = 202.
Quartets : 1100=C1100 = \text{C} et 1010=A1010 = \text{A}, donc 202=CA16202 = \overline{\text{CA}}^{\,16}.

Correction · Question b

128202<256=28128 \leq 202 < 256 = 2^8 : il faut 88 bits.
Somme : 404<512=29404 < 512 = 2^9, donc 99 bits.
Produit : 40804<65536=21640\,804 < 65\,536 = 2^{16}, donc 1616 bits, soit 2×82 \times 8.

Correction · Question c

Sur 1616 bits, 202=00000000110010102202 = \overline{0000\,0000\,1100\,1010}^{\,2}.
Inversion : 11111111001101012\overline{1111\,1111\,0011\,0101}^{\,2}.
Plus 11 : 11111111001101102\overline{1111\,1111\,0011\,0110}^{\,2}.
Vérification : 65536202=65334=FF361665\,536 - 202 = 65\,334 = \overline{\text{FF36}}^{\,16}.

Correction · Question d

Non signé : 128+64+32+16=240128 + 64 + 32 + 16 = 240.
Signé : 128+64+32+16=16-128 + 64 + 32 + 16 = -16. Vérification : 240256=16240 - 256 = -16.

Vérifie tout cela en une fois :

À retenir

Révise ce chapitre avec KlarIA

Tuteur qui t'explique pas à pas, quiz pour t'entraîner, flashcards pour mémoriser. Gratuit.

Créer mon compte gratuitement