MathLvl
Question transversaleMathsNSIReprésenter l'information

Comment un ordinateur représente-t-il les nombres négatifs, et pourquoi 127 + 1 peut-il donner −128 ?

Sur 8 bits, le complément à deux code −x par 256 − x : −23 devient 233, soit 11101001. L'addition devient une addition modulo 256, si bien que l'on soustrait sans circuit dédié, mais 127 + 1 « déborde » et donne −128.

Grand oral session 2027 : exposé de 10 minutes debout, puis 10 minutes d'échange, sans calculatrice. Plan prévu pour 9,5 min.

Pourquoi cette question : un modèle d'introduction

Le jury attend que vous expliquiez pourquoi vous avez choisi la question. Inspirez-vous de ce modèle, mais racontez votre propre parcours.

Un jour, un programme de jeu que j'avais écrit affichait un score négatif après une très bonne partie. Mon professeur de NSI m'a parlé de « dépassement de capacité ». J'ai voulu comprendre comment un nombre peut changer de signe en ajoutant 1, et j'ai découvert que les ordinateurs calculent en réalité sur un cercle de nombres, comme une horloge.

L'enjeu et les notions du programme

Montrer qu'un codage astucieux transforme la soustraction en addition grâce au calcul sur les restes, et en expliquer la limite.

Mathématiques

  • Division euclidienne, restes (seconde)
  • Puissances de 2, sommes géométriques (première)
  • Raisonnement sur les intervalles d'entiers (seconde)

Numérique et sciences informatiques

  • Représentation binaire d'un entier relatif, complément à deux (première)
  • Dépassement de capacité, types de taille fixe (première)

Le plan de l'exposé en 9,5 min

  1. 1. Introduction

    1 min

    Avec 8 bits, on dispose de 2⁸=256 motifs. Pour coder des nombres positifs et négatifs, il faut partager ces motifs. Problématique : quel partage permet à la machine de calculer le plus simplement possible ?

  2. 2. Mathématiques : calculer sur un cercle

    4 min

    Idée naïve : un bit de signe et 7 bits de valeur. Problème : 0 a deux écritures (+0 et -0) et l'addition de 5 et -3 demande un circuit spécial.

    Complément à deux : on code -x (pour 1≤ x≤128) par l'entier 256-x. Par exemple, -23 est codé par 233=11101001₂. Les nombres représentés vont de -128 à 127, et 0 n'a qu'une écriture.

    Pourquoi c'est commode : la machine additionne les motifs et garde le reste de la division par 256 (le 9ᵉ bit est perdu). Pour 40+(-23) : 40+233=273=256+17, il reste 17, le bon résultat. Additionner 256-x revient, au reste près, à soustraire x.

    Astuce de calcul : 256-x=(255-x)+1, et 255-x s'obtient en inversant tous les bits de x. D'où la règle : « inverser les bits, puis ajouter 1 ».

  3. 3. NSI : le dépassement de capacité

    3 min

    Le plus grand entier positif est 127=01111111₂. Ajoutons 1 : on obtient 10000000₂=128, motif qui code 256-128, donc -128. Le calcul est juste modulo 256, mais faux pour l'humain : c'est le dépassement de capacité.

    Il a causé de vrais bugs : compteurs qui repassent en négatif, jeux dont le score s'inverse. En Python, les entiers ne débordent pas, mais dans les langages à entiers de taille fixe (C, Java) ou dans les bibliothèques de calcul numérique, il faut tester ou choisir un type plus grand. Sur 32 bits, l'intervalle devient [-2³¹;2³¹-1].

  4. 4. Conclusion

    1,5 min

    Le complément à deux code -x par 2ⁿ-x : l'ordinateur additionne alors sur un cercle de 2ⁿ nombres et la soustraction devient une addition. La contrepartie est le débordement : après 127, on retombe sur -128. J'ouvre sur les nombres à virgule, représentés tout autrement.

Ce que j'écris au tableau

Pas de calculatrice ni de support numérique : un calcul clé écrit au tableau rend l'exposé concret et montre la solidité des connaissances.

-x longmapsto 2⁸-x -23 longmapsto 233=11101001₂
40+233=273=256+17 ⇒ 17 127+1=128 longmapsto -128

Conclusion : la réponse à la question

Les ordinateurs calculent sur les restes de la division par 2ⁿ : le complément à deux exploite ce fait pour soustraire avec un additionneur. Le débordement de 127 vers −128 n'est pas une erreur de la machine, mais la trace de ce cercle.

Les questions probables du jury

Pendant les 10 minutesd'échange, le jury vous fait préciser et approfondir, sur tout le programme de vos spécialités en lien avec la question.

Codez −1 sur 8 bits.

256-1=255=11111111₂ : tous les bits à 1.

Comment savoir si un motif code un nombre négatif ?

Son bit de poids fort vaut 1 : les motifs de 128 à 255 codent les nombres de −128 à −1.

Pourquoi l'intervalle n'est-il pas symétrique ?

Il y a 256 motifs : 0 en prend un, il en reste 255, partagés en 127 positifs et 128 négatifs.

Quel lien avec une horloge ?

Sur une horloge, 11 h + 3 h = 2 h : on calcule le reste de la division par 12. Ici, on calcule modulo 256.

Que donne l'opposé de −128 sur 8 bits ?

256-128=128, motif qui code encore -128 : l'opposé n'est pas représentable.

Les pièges qui coûtent des points

  • Oublier le « + 1 » après l'inversion des bits.
  • Croire que le bit de signe seul suffit : la valeur des autres bits change aussi.
  • Dire que la machine se trompe lors d'un dépassement : elle calcule juste, modulo 2ⁿ.

Revoir les notions

Autres questions : représenter l'information

Toutes les questions maths-nsi →

Préparer l'oral, pas seulement le contenu

Gestion des 20 minutes de préparation, usage du tableau, posture debout, réponses au jury : la méthode complète, conforme aux règles de la session 2027.

Méthode : traiter une question de Grand oral →