Aller au contenu

Entiers relatifs

Note

🤔 Le but est de trouver un moyen, avec des 0 et des 1 de reprĂ©senter un entier nĂ©gatif.

Comment coder – 6 ?

I. Une premiĂšre piste⚓

On pourrait imaginer utiliser un bit de signe.

👉 On convient de travailler sur 8 bits, ce qui est plus simple, et ne change rien Ă  la comprĂ©hension du principe.

6 est codé sur 8 bits en binaire par :

Question

6 est codé sur 8 bits en binaire par :

Solution

0000 0110

Question

🤔 On peut imaginer de rĂ©server le bit de gauche (de poids fort) au signe, et de lui donner la valeur 0 pour un signe positif et 1 pour un signe nĂ©gatif.

👉 Avec cette convention, - 6 serait codĂ© sur 8 bits en binaire par :

Solution

1000 0110

Question

Avec cette convention, rĂ©aliser en binaire l’opĂ©ration 6 + (-6) :

Solution
📋 Texte
         11
    0000 0110
  + 1000 0110
  ____________
  = 1000 1100
🌵 Quel est le problĂšme ?
Solution

😭 Le rĂ©sultat de 6 +(- 6) ne donnerait pas 0, mais - 12

II. Recherche de l’opposĂ© d’un entier⚓

Note

💡 On va chercher Ă  trouver une reprĂ©sentation de - 6 sur 8 bits, qui respecte le fait que 6 + (- 6 ) = 0

Pour cela, compléter l'addition "à trou" suivante
📋 Texte
  0000 0110
+
___________
= 0000 0000
Solution
📋 Texte
  1 1111 11
    0000 0110
  + 1111 1010
 ____________
  = 0000 0000
On trouve donc qu'une reprĂ©sentation de - 6 pourrait ĂȘtre :

1111 1010

Le bon choix

💡 C'est effectivement cette reprĂ©sentation qui va ĂȘtre choisie. La mĂ©thode est ingĂ©nieuse : le 1 le plus Ă  gauche (le bit de poids fort) du rĂ©sultat "disparaĂźt" car on ne dispose que de 8 bits. Le rĂ©sultat devrait ĂȘtre 1 0000 0000, mais seuls les 8 bits contenant 0000 0000 sont conservĂ©s.

Précision

L'opposé d'un entier, est une sorte de "complément à 0". Ici, en fait, nous avons fait un "complément à 1 0000 0000", c'est à dire en décimal à \(2^8\). Dans la pratique, on dit simplement qu'on a fait le complément à 2.

Généralisation sur \(n\) bits

La méthode se transpose sur \(n\) bits. On fait donc un complément à \(2^n\), qui est toujours appelé complément à 2.

III. MĂ©thode du complĂ©ment Ă  2⚓

Comment faire ?

Nous allons voir sur notre exemple, une mĂ©thode qui donne le mĂȘme rĂ©sultat, sans poser l'addition Ă  trou.

  • Etape 1 : coder 6 sur 8 bits, et donc bien mettre tous les 0 nĂ©cessaires Ă  gauche : 0000 0110
  • Etape 2 : "inverser les bits" : 1111 1001
  • Etape 3 : Ajouter 1

Exemple

📋 Texte
         1
  1111 1001
+ 0000 0001
___________
= 1111 1010

😊 On retrouve le rĂ©sultat que l'on avait avec l'addition "Ă  trou"

Résumé : Pour écrire un entier négatif en complément à 2 sur \(n\) bits :

  • Coder la partie positive de l'entier (sa valeur absolue) sur \(n\) bits en binaire, en rajoutant des 0 Ă  gauche si nĂ©cessaire.
  • Inverser tous les bits.
  • Ajouter 1.

Vocabulaire : le complément à 1

👉 Inverser tous les bits s'appelle faire le complĂ©ment Ă  1. Par exemple le complĂ©ment Ă  1 de 1010 1010 est 0101 0101. L'Ă©tape 2 consiste donc Ă  faire le complĂ©ment Ă  1.

Notations

Il existe plusieurs notations possibles :

\((-6)_{10}=(11111010)_{c2}=(11111010)_{A2}=(11111010)_{cpt2}\) etc.

Le contexte permet de comprendre qu'il s'agit d'un entier codé en complément à 2.

A vous de jouer 1 !

Utiliser la méthode du complément à 2 pour coder sur 8 bits : - 36

Solution
  • 36 sur 8 bits : 0010 0100
  • Inversion des bits : 1101 1011
  • Ajout de 1 : 1101 1100

👉 La rĂ©ponse est donc : 1101 1100

A vous de jouer 2 !

Utiliser la méthode du complément à 2 pour coder sur 8 bits : - 75

Solution
  • 75 sur 8 bits : 0100 1011
  • Inversion des bits : 1011 0100
  • Ajout de 1 : 1011 0101

👉 La rĂ©ponse est 1011 0101

Convertir en décimal un nombre donné en complément à 2

Exemple

Le codage sur 8 bits de - 6 en complément à 2 est : 1111 1010

Calculer : \(- 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^1\)

Qu'obtenez-vous?

Solution

\(- 6\)

Faire un calcul analogue pour - 36
Solution

Le codage sur 8 bits de - 36 en complément à 2 est : 1101 1100

\(- 2^7 + 2^6 + 2^4 + 2^3 + 2^2 = - 36\)

Faire un calcul analogue pour - 75
Solution

Le codage sur 8 bits de - 75 en complément à 2 est : 1011 0101

\(- 2^7 + 2^5 + 2^4 + 2^2+1 = - 75\)

Résumé :

Pour convertir un nombre entier nĂ©gatif codĂ© en complĂ©ment Ă  2 sur n bits en dĂ©cimal, on procĂšde comme s’il Ă©tait codĂ© en binaire, sauf que le terme correspondant au bit de poids fort (correspondant au coefficient de \(2^{n-1}\)) est multipliĂ© par -1.

Conséquence : les entiers positifs

Pour convertir un nombre entier positif codĂ© en complĂ©ment Ă  2 sur n bits on le code en binaire. Le terme correspondant au bit de poids fort (correspondant au coefficient de \(2^{n-1}\)) doit absolument ĂȘtre Ă©gal Ă  0 (sinon, cela correspondrait Ă  un entier nĂ©gatif)

Convertir

1. Convertir le nombre 1010 1010 donné en complément à 2 sur 8 bits en base 10 :

Solution

\(-2^7 + 2^5+ 2^3+ 2^1 = -128+32+8+2= - 86\)

2. Convertir le nombre 0110 1010 donné en complément à 2 sur 8 bits en base 10 :

Solution

\(0 \times (-2^7) + 2^6 + 2^5+ 2^3+ 2^1 = 64+32+8+2= 106\)

✏️ Un petit problĂšme :

Essayer de coder sur 8 bits, avec la méthode du complément à 2 : - 135.
Solution
  • 135 sur 8 bits : 1000 0111
  • Inversion des bits : 0111 1000
  • Ajout de 1 : 0111 1001

👉 La rĂ©ponse est 0111 1001

😢 Pourquoi ce rĂ©sultat est-il impossible ?
Solution

Le bit de poids fort est Ă  0, ce qui correspond Ă  un entier positif.

Essayer de coder sur 8 bits, avec la méthode du complément à 2 : 130.
Solution

130 en binaire sur 8 bits : 1000 0010

😢 Pourquoi ce rĂ©sultat est-il impossible ?
Solution

Le bit de poids fort est à 1, ce qui correspond à un entier négatif.

IV. Entiers que l’on peut reprĂ©senter en complĂ©ment Ă  deux :⚓

Sur 8 bits

  • Sur 8 bits, le plus petit entier que l’on peut reprĂ©senter est donc :

\(-1 \times 2^7 + 0 \times 2^6+ 0 \times 2^5+ 0 \times 2^4+ 0 \times 2^3+ 0 \times 2^2+ 0 \times 2^1+ 0 \times 2^ 0= -128 = -2^7\)

Il est codé par 1000 0000.

  • Sur 8 bits, le plus grand entier que l’on peut reprĂ©senter est donc :

\(0 \times 2^7 + 1 \times 2^6+1 \times 2^5+ 1 \times 2^4+ 1 \times 2^3+ 1 \times 2^2+ 1 \times 2^1+ 1 \times 2^ 0= 127 = 2^7-1\)

Il est codé par 0111 1111.

Résumé :

Avec \(n\) bits, il devient possible de reprĂ©senter \(2^n\) entiers compris entre \(−2^{n−1}\) et \(2^{n−1}−1\).

V. Exercices⚓

Exercice 1

Les nombres ci-dessous sont codés en complément à 2 sur 8 bits. Les convertir en décimal.

a) \((1111\ 0111)_{cpt2}\)
b) \((1011\ 0101)_{cpt2}\)
c) \((0011\ 0101)_{cpt2}\)

Solution

a) \(- 2^7 + 2^6 + 2^5+ 2^4 + 2^2 + 2^1+ 1=-9\)

b) \(- 2^7 + 2^5+ 2^4+ 2^2 + 1=- 75\)

c) \(2^5+ 2^4+ 2^2 + 1= 53\)

Exercice 2 : le bug de l'an 2038

1. Quel est le plus grand entier positif que l'on peut coder en complément à 2 sur 32 bits ? En donner la valeur exacte en base 10.

Solution

\(2^{31}-1=2~147~483~647\)

2. Que se passe-t-il si on ajoute 1 au nombre trouvé en question 1? Quel nombre représente-t-il en base 10 sachant qu'il est codé en complément à 2 sur 32 bits ?

Solution

\(2^{31}-1 + 1=2^{31}\) est codé par 10000000 00000000 00000000 00000000. Ce nombre est égal à \(-2^{31}=-2~147~483~648\)

3. L'heure Unix ou heure Posix est une mesure du temps fondĂ©e sur le nombre de secondes Ă©coulĂ©es depuis le 1er janvier 1970 00:00:00 UTC, hors secondes intercalaires. Elle est utilisĂ©e principalement dans les systĂšmes qui respectent la norme POSIX, dont les systĂšmes de type Unix, d'oĂč son nom. C'est la reprĂ©sentation POSIX du temps.

NB: cette date du « 1er janvier 1970 00:00:00 UTC » est appelée « époque Unix ».

Source : Wikipédia

Le site unixtime permet la conversion entre temps Unix et temps UTC (Universal Time Coordinated ou Temps Universel Coordonné en français)

a) Déterminer la date correspondant à 2 147 483 647 en temps UTC

b) Déterminer la date correspondant à -2 147 483 648 en temps UTC

Solution

a) 19/01/2038 @ 03:14:07

b) 13/12/1901 @ 20:45:52

4 Lire cet article du journal Le Parisien ainsi que cet article de Wikipédia.

Quel est le problÚme pour les systÚmes qui mesurent le temps en temps Unix codé en complément à 2 sur 32 bits ?

Solution

Le 19 janvier 2038 Ă  3 h 14 min 8 s, temps universel, les systĂšmes affectĂ©s par le bug considĂ©reront alors ĂȘtre le 13 dĂ©cembre 1901 Ă  20 h 45 min 52 s.

VI. QCM⚓

1. Que peut-on dire de l'entier relatif \(10100001_2\) codé sur 8 bits en complément à deux ?
  • a) Cet entier est pair.
  • b) Cet entier est nĂ©gatif.
  • c) Cet entier est positif.
  • d) Cet entier vaut \(-23_{10}\).
  • ❌
  • ✅
  • ❌
  • ❌
2. Si 1011 est un entier signé sur quatre bits en complément à 2, alors sa valeur décimale est :
  • a) -7
  • b) - 5
  • c) 5
  • d) 7
  • ❌
  • ✅
  • ❌
  • ❌
3. Donner l'écriture de \(-3_{10}\) en complément à deux sur quatre bits :
  • a) 0111
  • b) 1101
  • c) 1011
  • d) 1111
  • ❌
  • ✅
  • ❌
  • ❌