madamasterclass.com

📔 Représentation des entiers relatifs

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).

Représentation des entiers en binaire

1. Rappel : Représentation binaire des entiers naturels
  • Base 2 : Chaque position représente une puissance de 2
  • N bits permettent de représenter \(2^N\) valeurs différentes
  • Entiers naturels : de 0 à \(2^N - 1\) sur \(N\) bits
📋 Mémo rapide : Sur \(n\) bits non signés → 0 à \(2^n - 1\)

2. Problème : Représentation des entiers relatifs
  • ✦ Comment représenter les nombres négatifs avec des bits ?
  • ✦ Trois approches historiques possibles
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
3. Le complément à deux - Méthode de calcul
  • ✦ Méthode standard pour représenter les entiers relatifs
  • ✦ Permet l'addition directe de nombres positifs et négatifs
   🔢 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 ✓
   
⚡ Formule rapide : -x = ~x + 1 (inversion bit à bit + 1)
4. Plages de valeurs et propriétés
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
⚠️ Asymétrie importante : |min| = |max| + 1. Il y a une valeur négative de plus que de valeurs positives !
5. Addition modulaire - Le mécanisme
  • ✦ L'addition se fait normalement, les dépassements sont ignorés
  • ✦ Permet un traitement uniforme des positifs et négatifs
   🔄 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 ✓
   
6. Détection et gestion des dépassements
🚨 Détection d'overflow :
• Deux positifs → résultat négatif = OVERFLOW
• Deux négatifs → résultat positif = UNDERFLOW
   💡 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;
   }
   
7. Opérations bit à bit utiles
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
⚠️ Attention : Le décalage à droite (>>) des nombres négatifs dépend de l'implémentation !
8. Résumé des points essentiels
💡 Points clés à retenir :
  • 🔸 Le complément à 2 est LA méthode standard pour les entiers signés
  • 🔸 Formule magique : -x = ~x + 1
  • 🔸 Plage asymétrique : -2^(n-1) à 2^(n-1)-1
  • 🔸 L'addition modulaire permet de traiter uniformément + et -
  • 🔸 Toujours vérifier les dépassements dans le code critique
  • 🔸 Les opérations bit à bit sont très efficaces
9. Conclusion

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.

Application des Concepts d'Entiers en Informatique

Exercice 1: Représentation binaire ★ ★ ☆ ☆ ☆

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.

Correction détaillée :

Question 1 :
Méthode : Décomposition polynomiale
5 = 4 + 1 = 2² + 2⁰ ⇒ 101 en binaire
Complément à 8 bits : On ajoute des zéros non significatifs à gauche → 00000101

Question 2 :
5 + 3 = 8
Vérification : Sur 8 bits non-signés, la plage est [0, 255]
8 ∈ [0, 255] ⇒ Résultat valide (pas de débordement)


Exercice 2: Complément à deux ★ ★ ★ ☆ ☆

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

Étapes pas à pas :

Question 1 :
+3 = 2¹ + 2⁰ → 0011
Vérification : Le bit de signe (MSB) est bien 0 pour un nombre positif

Question 2 :
Étape 1 : Inversion → 1100
Étape 2 : Ajout de 1 → 1100 + 0001 = 1101
Validation : 1101 représente bien -3 (car -8 + 4 + 1 = -3)


Exercice 3: Opérations arithmétiques ★ ★ ★ ★ ☆

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

Attention : Le débordement (overflow) se produit quand le résultat dépasse la plage [-128, 127] pour 8 bits signés.
Solution complète :

Partie 1 : Représentation de -5
1. Valeur absolue : 5 → 00000101
2. Complément à 1 : 11111010
3. Complément à 2 (ajout de 1) : 11111011

Partie 2 : Addition
-5 → 11111011
+8 → 00001000
-------------------
Résultat → 00000011 (avec retenue ignorée)

Interprétation :
• Résultat décimal : 3
• Pas de débordement (car 3 ∈ [-128, 127])
• Retenue finale : 1 (ne signifie pas overflow en complément à deux)


Exercice 4: Détection de débordement ★ ★ ★ ★ ★

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.

Méthode : Pour détecter un overflow, comparez le signe des opérandes avec celui du résultat.
Analyse approfondie :

Question 1 : Plage de valeurs
• Plage théorique : [-2⁷, 2⁷-1] = [-128, 127]
• -128 est la valeur minimale → représentable (10000000)

Question 2 : Cas d'overflow
Calcul : 127 (01111111) + 1 (00000001) = 10000000
Problème :
- Résultat interprété comme -128 (car bit de signe à 1)
- Overflow détecté car :
  ∙ Deux nombres positifs donnent un résultat négatif
  ∙ 128 ∉ [-128, 127]


Exercice 5: Opérations bit à bit ★ ★ ★ ★ ★

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 ?

Rappel : • Décalage à droite ≡ division entière par 2
• Décalage à gauche ≡ multiplication par 2 (risque de débordement)
Explications :

Décalage à droite (>> 1) :
1000 (8) → 0100 (4)
Équivalent mathématique : 8 / 2 = 4

Décalage à gauche (<< 1) :
1000 (8) → 10000 (16)
Attention : Si on travaillait sur 4 bits, on perdrait le bit de poids fort → résultat erroné


Exercice 6: Codage et interprétation ★ ★ ☆ ☆ ☆

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 ?

Correction détaillée :

1. Représentation binaire :
12 = 8 + 4 → 1100 → sur 8 bits : 00001100

2. Valeur hexadécimale :
00001100 = 0×16 + C = 0C

3. Nombre minimal de bits :
2⁴ = 16 ⇒ 4 bits suffisent → 1100

4. Bit de poids fort en signé :
Si le bit de gauche est 0 → nombre positif
Ici 00001100 : le MSB = 0 ⇒ positif


Exercice 7: Comparaison de représentations ★ ★ ★ ☆ ☆

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 ?

Correction détaillée :

1. Interprétation non signée :
11110011 = 128+64+32+16+0+0+2+1 = 243

2. Interprétation signée (complément à 2) :
Bit de signe = 1 → négatif
Inversion : 00001100, +1 ⇒ 00001101 = 13
Donc 11110011 = -13

3. Hexadécimal :
11110011 = F3

4. Plage signée :
[-128, 127] → ici 243 (non signé) > 127 ⇒ Dépassement si mal interprété


Exercice 8: Addition en binaire signé ★ ★ ★ ★ ☆

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.

Correction pas à pas :

1. -60 :
+60 = 00111100 → inversion : 11000011 + 1 = 11000100

2. -70 :
+70 = 01000110 → inversion : 10111001 + 1 = 10111010

3. Addition :
11000100 + 10111010 = 01111110 (en ignorant la retenue)

4. Vérification :
-60 + -70 = -130
Hors plage [-128, 127] ⇒ Débordement (résultat faux en complément à deux)


Exercice 9: Multiplication par décalage ★ ★ ★ ☆ ☆

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 ?

Correction guidée :

1. 7 × 4 :
4 = 2² ⇒ décaler deux fois à gauche :
7 = 0111 → <<2 = 011100 = 28

2. 7 × 5 :
5 = 4 + 1 → faire (7 << 2) + 7 = 28 + 7 = 35

3. Avantage :
Les opérations de décalage sont très rapides au niveau matériel (1 cycle), contrairement aux multiplications classiques.


Exercice 10: Analyse de mot binaire signé ★ ★ ★ ★ ★

Objectif 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é ?

Analyse complète :

1. Signe :
MSB = 1 ⇒ négatif

2. Complément à deux :
Inversion de 10010110 = 01101001 + 1 = 01101010 = 106
Donc 10010110 = -106

3. Comparaison :
-106 < -100 ⇒ inférieur

4. Version non signée :
10010110 = 128 + 16 + 4 + 2 = 150


Exercice 11 : Capteur de température numérique ★ ★ ☆ ☆ ☆

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.

Correction :

1. 00111110 = 32 + 16 + 8 + 2 = 62 °C
2. En hexadécimal : 3E
3. Sur 8 bits non signés : plage = [0, 255] → 0 à 255 °C
4. Non : les entiers non signés ne permettent pas de coder des valeurs négatives.


Exercice 12 : Robot mobile et coordonnées signées ★ ★ ★ ☆ ☆

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 ?

Correction :

1. 11101100 est signé (bit de poids fort = 1) → négatif
Inversion : 00010011 + 1 = 00010100 = 20
Donc : -20
2. Négatif ⇒ à gauche de l’origine
3. +20 = 00010100
4. En signé sur 8 bits : [-128, 127]


Exercice 13 : Éclairage intelligent et PWM ★ ★ ☆ ☆ ☆

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é ?

Correction :

1. 80 en binaire = 01010000
2. En hexadécimal : 0x50
3. Pourcentage ≈ (80 / 255) × 100 ≈ 31%
4. 50 % de 255 ≈ 128 → binaire : 10000000


Exercice 14 : Transmission réseau et trames binaires ★ ★ ★ ★ ☆

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" ?

Correction :

1. 10100000 = 128 + 32 = 160
2. En hexadécimal : A0
3. Bits 7 et 6 = 10 → priorité 2
4. Bit 5 = 1 → c’est une commande


Exercice 15 : Jeu vidéo et encodage de position ★ ★ ★ ★ ★

Contexte : 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 ?

Correction :

1. 10000011 → MSB = 1 → négatif
Inversé : 01111100 + 1 = 01111101 = 125
Donc : -125
2. Plage = [-128, 127] → amplitude max = 128 vers le bas, 127 vers le haut
3. -125 ⇒ très bas dans l’écran
4. +3 = 00000011


Forum(s) associé(s)

Page: