Prepa Help
Prepa Help › Cours › Informatique, 1re année

Représentation des nombres : complément à deux et flottants, cours et exercices corrigés

Bits et octets, entiers naturels et complément à deux, entiers de Python, flottants (mantisse, exposant) et limites du calcul en Python. Propre au programme marocain : composants de l'ordinateur, conversions de base, codage des flottants et des caractères.

Les nombres sont ceux du chapitre complet ; chaque filière voit la partie qui correspond à son programme.

Le complément à deux est la façon dont un ordinateur code les entiers relatifs sur nn bits : un entier négatif xx y est représenté par l'écriture binaire de 2n+x2^n + x. Les réels sont rangés en flottants (signe, mantisse, exposant), codés selon la norme IEEE 754, dont le détail n'est exigible qu'au Maroc : les flottants de Python occupent 64 bits, ce qui explique que 0.1 + 0.2 affiche 0.30000000000000004. Ce chapitre fait partie de l'informatique commune de première année en MPSI, PCSI, PTSI, TSI et TPC, au Maroc et en France ; ses exercices reprennent des questions des sujets du CNC, de CCINP, de Mines-Ponts et de Centrale-Supélec. On y traite la représentation des entiers, le dépassement, les entiers de Python, l'absorption et la comparaison de deux flottants.

Ce que tu sauras faire

Un ordinateur ne manipule que des bits. Ce chapitre explique comment des nombres y sont rangés, et pourquoi certains calculs ne donnent pas le résultat attendu. À la fin, tu dois savoir :

L'essentiel : Entiers Extrait gratuit

Un extrait de la fiche « L'essentiel » du chapitre. Les démonstrations sont dans le cours détaillé.

Sur nn bits Plus petit Plus grand 8 bits 32 bits
naturels 00 2n−12^n - 1 0 à 255 0 à 4 294 967 295
complément à deux −2n−1-2^{n-1} 2n−1−12^{n-1} - 1 −128-128 à 127127 −2 147 483 648-2\,147\,483\,648 à 2 147 483 6472\,147\,483\,647
Propriété Nombre de bits
  • Pour coder NN valeurs, il faut le plus petit nn tel que 2n≥N2^n \geq N.
  • L'écriture binaire de N≥1N \geq 1 a ⌊log⁡2N⌋+1\lfloor \log_2 N \rfloor + 1 chiffres.
Définition Complément à deux
  • x≥0x \geq 0 est codé par son écriture binaire sur nn bits ; x<0x < 0 par celle de 2n+x2^n + x.
  • Calcul pratique pour −x-x : inverser les bits de xx, puis ajouter 1.
  • Décodage : un mot de valeur naturelle vv qui commence par 1 représente v−2nv - 2^n.
À retenir Addition et dépassement
  • Naturels : la somme est prise modulo 2n2^n ; une retenue sortante signale un dépassement.
  • Complément à deux : on ignore la retenue sortante. Il y a dépassement si et seulement si deux opérandes de même signe donnent un résultat de signe contraire. Sur 8 bits, 127+1127 + 1 donne −128-128.
  • Les entiers de Python ne débordent jamais ; les entiers de taille fixe calculent modulo 2n2^n sans erreur (un scalaire numpy donne un avertissement, un tableau numpy rien).

Une méthode du chapitre Extrait gratuit

Un exercice corrigé Extrait gratuit

Dans le chapitre complet

Le cours détaillé, toute la fiche « L'essentiel », 20 méthodes, 20 pièges corrigés, la carte mentale, 36 exercices corrigés, 3 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Ce chapitre est offert : il s’ouvre en entier avec un compte d’essai gratuit.

Ouvrir l'essai gratuit

Plan du cours

Les méthodes du chapitre

Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.

  1. Compter les valeurs sur nn bits et les bits nécessaires pour NN valeurs
  2. Calculer une taille mémoire et l'exprimer dans la bonne unité
  3. Calculer la valeur d'un mot binaire non signé
  4. Additionner deux mots non signés et repérer un dépassement
  5. Coder un entier relatif en complément à deux
  6. Décoder un mot en complément à deux
  7. Additionner en complément à deux et détecter un dépassement
  8. Prévoir le résultat d'un calcul sur des entiers
  9. Décider si un nombre est représenté exactement par un flottant
  10. Prévoir le résultat d'un calcul en flottants
  11. Comparer deux flottants avec une tolérance
  12. Estimer la précision d'un flottant
  13. Écrire un programme de conversion entre un entier et ses chiffres dans une base
  14. Convertir un entier décimal en base 2 ou 16 par divisions successives
  15. Passer du binaire à l'hexadécimal ou à l'octal par paquets
  16. Coder en signe et valeur absolue et montrer ses défauts
  17. Écrire un nombre à virgule en binaire et en virgule fixe
  18. Encoder un réel en simple précision IEEE 754
  19. Décoder un mot IEEE 754 de 32 ou 64 bits
  20. Coder et décoder un texte en ASCII

Les exercices corrigés

Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.

Application directe (15)

Entraînement (16)

Approfondissement (5)

Les problèmes de concours

Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.

Questions fréquentes

Comment coder un nombre négatif en complément à deux ?

Sur nn bits, un entier x<0x < 0 est représenté par l'écriture binaire de 2n+x2^n + x. Pour −12-12 sur 8 bits : 256−12=244256 - 12 = 244, soit 11110100. On vérifie par l'autre méthode : on écrit 1212 = 00001100, on inverse les bits (11110011), puis on ajoute 1, ce qui redonne 11110100. Le bit de poids fort vaut 1 : le nombre est bien négatif.

Quel est l'intervalle des entiers en complément à deux sur n bits ?

Sur nn bits, le complément à deux représente les entiers de −2n−1-2^{n-1} à 2n−1−12^{n-1} - 1 : de −128-128 à 127127 sur 8 bits, de −2 147 483 648-2\,147\,483\,648 à 2 147 483 6472\,147\,483\,647 sur 32 bits. Dans une addition, on ignore la retenue sortante ; il y a dépassement si et seulement si deux opérandes de même signe donnent un résultat de signe contraire. Sur 8 bits, 127+1127 + 1 donne −128-128.

Pourquoi 0.1 + 0.2 ne donne pas 0.3 en Python ?

Un réel n'a une écriture binaire finie que s'il s'écrit k/2pk / 2^p. C'est le cas de 0,5 ou 0,375, mais pas de 0,1, 0,2 ou 0,3 : en binaire, 0,1 s'écrit 0,0 0011 0011... sans fin. Chaque flottant est donc arrondi, chaque opération aussi, et 0.1 + 0.2 affiche 0.30000000000000004. Ce n'est pas une erreur de Python, mais une limite du calcul en flottants.

Comment est codé un flottant selon la norme IEEE 754 ?

Ce codage détaillé est au programme marocain ; en France, la norme IEEE 754 est hors programme et les sujets rappellent le format utile. Un flottant s'écrit (−1)s×m×2e(-1)^s \times m \times 2^e avec 1≤m<21 \leq m < 2. En simple précision (32 bits) : 1 bit de signe, 8 bits d'exposant décalé de 127, 23 bits de mantisse. En double précision (64 bits, les flottants de Python) : 1, 11 et 52 bits, décalage 1023. Le 1 de tête de la mantisse est implicite, ce qui donne 53 chiffres binaires significatifs, soit 15 à 16 chiffres décimaux.

Comment comparer deux flottants en Python ?

Jamais avec a == b, à cause des arrondis. On écrit abs(a - b) <= eps, avec une tolérance adaptée à l'ordre de grandeur, ou la tolérance relative abs(a - b) <= eps * abs(b). Pour comparer à 0, on combine les deux : abs(a - b) <= eps_rel * abs(b) + eps_abs. Une tolérance s'écrit 1e-9 : 1**-9 vaut 1.0.

Les entiers de Python peuvent-ils déborder ?

Non : les entiers de Python ne débordent jamais. Les entiers de taille fixe, eux, calculent modulo 2n2^n sans lever d'erreur : un scalaire numpy donne seulement un avertissement, un tableau numpy rien du tout. Les flottants, en revanche, sont limités : le plus grand vaut environ 1,8×103081{,}8 \times 10^{308}, et 2.0 ** 1024 provoque une erreur.

Comment y accéder

Ce chapitre fait partie des chapitres offerts : il s'ouvre en entier avec un compte d'essai gratuit. Créer un compte d'essai ou se connecter. Pour l'accès complet, les tarifs ou une question, écris-nous sur WhatsApp.

Toute ta prépa au même endroit

Pour chaque chapitre : le cours, l'essentiel, les méthodes, les pièges, les exercices corrigés, les problèmes de concours, et un assistant qui répond à tes questions. Programmes du Maroc et de France.

Essayer gratuitement Prepa Help

Bases de Python : expressions, types, instructions, fonctions →