Comprendre la Représentation des entiers relatifs
Dans ce cours, nous allons explorer la représentation des entiers en informatique. Nous verrons comment les entiers positifs et négatifs sont codés en binaire, les concepts d'addition modulaire et de complément à deux, ainsi que les limitations et problèmes liés à ces représentations.
En informatique, les entiers sont représentés en binaire avec un nombre fixe de bits. Cette représentation, bien que fondamentale, impose des contraintes et peut entraîner des comportements inattendus comme les dépassements de capacité (overflow).
Méthode | Exemple -3 (4 bits) | Problème |
---|---|---|
Signe + magnitude | 1011 | Deux représentations de 0 |
Complément à 1 | 1100 | Deux représentations de 0 |
Complément à 2 | 1101 | ✅ Solution retenue |
🔢 Pour obtenir -x en complément à 2 : 1️⃣ Inverser tous les bits de x (complément à 1) 2️⃣ Ajouter 1 au résultat Exemple détaillé : -5 sur 8 bits 5 = 00000101 (représentation binaire de 5) Complément à 1 : 11111010 (inversion de tous les bits) Ajouter 1 : 11111011 = -5 en complément à 2 Vérification : 5 + (-5) = 00000101 + 11111011 = 100000000 → Le 9ème bit est ignoré → 00000000 = 0 ✓
Taille | Plage complément à 2 | Formule |
---|---|---|
8 bits (char) | -128 à 127 | -2⁷ à 2⁷-1 |
16 bits (short) | -32768 à 32767 | -2¹⁵ à 2¹⁵-1 |
32 bits (int) | -2147483648 à 2147483647 | -2³¹ à 2³¹-1 |
64 bits (long) | -9×10¹⁸ à 9×10¹⁸ | -2⁶³ à 2⁶³-1 |
🔄 Exemples sur 4 bits (plage : -8 à 7) : Cas normal : 3 + 2 = 5 0011 + 0010 = 0101 = 5 ✓ Overflow : 3 + 5 = 8, mais 8 > 7 (max sur 4 bits) 0011 + 0101 = 1000 = -8 ⚠️ Avantage : 5 + (-3) = 2 0101 + 1101 = 10010 → 0010 = 2 ✓ (9ème bit ignoré) Soustraction : 5 - 3 = 5 + (-3) 0101 + 1101 = 10010 → 0010 = 2 ✓
💡 Vérification AVANT l'addition (éviter l'overflow) : Pour a + b : if (a > 0 && b > MAX - a) → overflow positif if (a < 0 && b < MIN - a) → underflow négatif Exemple pratique en C : #define MAX_INT 2147483647 #define MIN_INT -2147483648 bool safe_add(int a, int b, int* result) { if (a > 0 && b > MAX_INT - a) return false; // overflow if (a < 0 && b < MIN_INT - a) return false; // underflow *result = a + b; return true; }
Opération | Formule | Exemple |
---|---|---|
Négation | -x = ~x + 1 |
-5 = ~5 + 1 |
Test de signe | x < 0 ⟺ MSB = 1 |
-5 → 1xxx xxxx |
Valeur absolue | abs(x) = (x < 0) ? -x : x |
abs(-5) = 5 |
Division par 2 | x >> 1 |
8 >> 1 = 4 |
-x = ~x + 1
-2^(n-1)
à 2^(n-1)-1
La représentation des entiers en complément à deux est élégante et efficace pour les calculs. Elle permet une arithmétique cohérente entre nombres positifs et négatifs grâce à l'addition modulaire. Cependant, cette représentation impose des limites strictes qui peuvent conduire à des bugs subtils. Comprendre ces mécanismes est essentiel pour développer des applications robustes et optimisées. La maîtrise des opérations bit à bit et des techniques de détection d'overflow vous permettra d'éviter les pièges les plus courants.
Objectif pédagogique : Maîtriser la représentation des entiers positifs en binaire pur et vérifier les contraintes de taille.
Énoncé :
1. Représentez le nombre 5 en binaire sur 8 bits.
Conseil : Décomposez le nombre en puissances de 2.
2. Vérifiez si l'addition de 5 et 3 donne un résultat valide sur 8 bits.
Astuce : Calculez d'abord la somme décimale avant de vérifier la plage autorisée.
101
en binaire00000101
Objectif pédagogique : Comprendre la représentation des nombres négatifs en complément à deux.
Énoncé :
1. Codez +3 en binaire sur 4 bits.
Rappel : Sur 4 bits, le bit de poids fort est réservé au signe.
2. Transformez ce résultat pour obtenir -3 en complément à deux.
Procédure : 1) Inversion bit à bit 2) Ajout de 1
0011
1100
1100
+ 0001
= 1101
1101
représente bien -3 (car -8 + 4 + 1 = -3)
Objectif pédagogique : Maîtriser l'addition binaire avec nombres signés et détection de débordement.
Énoncé :
Effectuez l'opération -5 + 8 en complément à deux sur 8 bits :
1. Représentez -5 correctement
2. Effectuez l'addition et analysez le résultat
00000101
11111010
11111011
11111011
00001000
00000011
(avec retenue ignorée)Objectif pédagogique : Identifier les cas critiques de débordement dans les opérations arithmétiques.
Énoncé :
1. La valeur -128 est-elle représentable en complément à deux sur 8 bits ?
2. Que se passe-t-il si on additionne 127 et 1 ? Analysez le résultat binaire.
10000000
)01111111
) + 1 (00000001
) = 10000000
Objectif pédagogique : Manipuler les décalages binaires et comprendre leur effet arithmétique.
Énoncé :
Prenez le nombre 8 (1000
en binaire) :
1. Quel est le résultat d'un décalage à droite de 1 bit ?
2. Quel est le résultat d'un décalage à gauche de 1 bit ?
1000
(8) → 0100
(4)1000
(8) → 10000
(16)Objectif pédagogique : Apprendre à encoder un nombre entier dans différents systèmes et interpréter sa signification binaire.
Énoncé :
On vous donne le nombre entier 12.
1. Représentez-le en binaire pur sur 8 bits.
2. Quelle est la valeur hexadécimale correspondante ?
3. Combien de bits minimum sont nécessaires pour le représenter en binaire pur ?
4. Quelle est la signification du bit de poids fort si on suppose un encodage signé sur 8 bits ?
1100
→ sur 8 bits : 00001100
00001100
= 0×16 + C = 0C
1100
00001100
: le MSB = 0 ⇒ positif
Objectif pédagogique : Distinguer les représentations signées et non signées d’un même mot binaire.
Énoncé :
Le mot binaire suivant est donné : 11110011
1. Quelle est sa valeur si on le considère comme un entier non signé ?
2. Quelle est sa valeur en complément à deux (signé) ?
3. Convertissez ce mot en hexadécimal.
4. Ce nombre dépasse-t-il la plage des entiers signés sur 8 bits ?
11110011
= 128+64+32+16+0+0+2+1 = 243
00001100
, +1 ⇒ 00001101
= 1311110011
= -1311110011
= F3
Objectif pédagogique : Savoir additionner deux entiers signés et détecter le débordement.
Énoncé :
Additionnez les deux nombres suivants : -60 et -70.
1. Codez -60 en complément à deux sur 8 bits.
2. Codez -70 en complément à deux sur 8 bits.
3. Réalisez l’addition binaire.
4. Indiquez s’il y a un débordement.
00111100
→ inversion : 11000011
+ 1 = 11000100
01000110
→ inversion : 10111001
+ 1 = 10111010
11000100
+ 10111010
= 01111110
(en ignorant la retenue)Objectif pédagogique : Utiliser les décalages pour multiplier/diviser rapidement par puissances de deux.
Énoncé :
1. Multipliez le nombre 7 par 4 en utilisant des décalages binaires.
2. Multipliez 7 par 5 en combinant un décalage et une addition.
3. Quel est l'avantage d'utiliser ces opérations au niveau matériel ?
0111
→ <<2 = 011100
= 28Objectif pédagogique : Identifier un entier signé et en déduire son interprétation complète.
Énoncé :
Le mot binaire suivant est observé dans un registre : 10010110
1. Est-ce un nombre positif ou négatif (en complément à deux) ?
2. Quelle est sa valeur décimale ?
3. Est-il supérieur ou inférieur à -100 ?
4. Quelle serait sa valeur si on le considérait comme non signé ?
10010110
= 01101001
+ 1 = 01101010
= 10610010110
= -10610010110
= 128 + 16 + 4 + 2 = 150
Contexte : Un capteur envoie des températures codées sur 8 bits non signés. La valeur binaire 00111110
est reçue.
Questions :
1. Quelle est la température reçue en décimal ?
2. Quelle est sa représentation hexadécimale ?
3. Quel est l’intervalle de températures possibles si l’unité est le degré Celsius ?
4. Peut-on détecter une température négative avec ce capteur ? Justifier.
00111110
= 32 + 16 + 8 + 2 = 62 °C3E
Contexte : Un robot stocke sa position sur un axe horizontal avec un entier signé codé sur 8 bits. Il envoie la valeur 11101100
.
Questions :
1. Quelle est la position en base 10 ?
2. Est-ce à gauche ou à droite de l’origine ?
3. Quelle serait la valeur si le robot était positionné à +20 ?
4. Quelle est la plage totale de coordonnées possibles ?
11101100
est signé (bit de poids fort = 1) → négatif00010011
+ 1 = 00010100
= 2000010100
Contexte : Une lampe à intensité variable utilise une valeur sur 8 bits pour définir la luminosité (0 = éteint, 255 = max). L’utilisateur sélectionne 80
en décimal.
Questions :
1. Quelle est la valeur binaire correspondante ?
2. Quelle est la valeur hexadécimale ?
3. Quel pourcentage approximatif de luminosité cela représente-t-il ?
4. Quelle valeur binaire représente 50 % de luminosité ?
01010000
10000000
Contexte : Un protocole réseau envoie des trames codées sur 8 bits. Une trame de commande critique est : 10100000
.
Questions :
1. Quelle est la valeur décimale de la trame ?
2. Quel est son code hexadécimal ?
3. Sachant que les bits 7-6 indiquent la priorité, quelle est sa priorité (en binaire) ?
4. La trame est-elle une commande ou une donnée si le bit 5 = 1 indique "commande" ?
10100000
= 128 + 32 = 160A0
10
→ priorité 2Contexte : Dans un jeu, la position verticale d’un joueur est encodée sur 8 bits signés. Une erreur de synchronisation transmet 10000011
.
Questions :
1. Quelle est la position reçue (en base 10) ?
2. Quelle est l’amplitude maximale possible en montée et descente ?
3. La position est-elle probablement en haut ou en bas de l’écran ?
4. Quelle serait la valeur correcte si on voulait envoyer +3 ?
10000011
→ MSB = 1 → négatif01111100
+ 1 = 01111101
= 12500000011
Abonnez-vous maintenant et recevez notre newsletter hebdomadaire avec des matériaux éducatifs, de nouveaux cours, des articles intéressants, des livres populaires et bien plus encore !