Aller au contenu

Exercices

Compléments à 2

Le tableau suivant correspond à la représentation binaire en complément à 2 sur 4 bits des entiers signés. Recopier et compléter ce tableau.

Entiers relatifs Bit 3 Bit 2 Bit 1 Bit 0
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
\ldots \ldots \ldots \ldots \ldots

Exercices

  1. Déterminer la représentation binaire en complément à 2 sur un octet des entiers signés :

    $24$ ; $-128$ ; $-2$ ; $-1$ ; $-127$. 2. Quelle plage d'entiers relatifs peut-on représenter en complément à 2 sur un octet ? 3. Donner la représentation sur un octet en complément à 2 du nombre représenté en base 10 par $-37$. 4. Effectuer en binaire l'addition $94 + 38$. Quel est l'entier relatif obtenu en considérant qu'il s'agit d'un codage en complément à 2 sur 8 bits ? Comment appelle-t-on ce problème ?

  2. Déterminer le codage binaire en complément à 2 sur un octet des entiers $19$ et $-6$, effectuer en binaire l'addition $19 + (-6)$ et vérifier qu'on obtient le même résultat que $19 - 6 = 13$ en binaire.

  3. Déterminer l'entier représenté en complément à 2 sur un octet par :

    10000001 ; 11111111 ; 10011100.

Un programme

On considère le code python ci-dessous.

🐍 Code Python
1
2
3
x = 1.0
while x != 0.0:
    x = x - 0.1

Quelle est l'affirmation correcte ?

  1. L'exécution ne s'arrête jamais.
  2. À la fin de l'exécution, x vaut -0.000001.
  3. À la fin de l'exécution, x vaut 0.000001.
  4. L'exécution s'arrête sur une FloatingPointError.

Parmi les nombres suivants, quels sont ceux dont la représentation sous forme de nombre flottant peut être écrite de manière exacte avec un nombre fini de chiffres en base 2 ?

$ 1/4 \quad 1/6 \quad 1/3 \quad 1/7 \quad 1/8 $

Lors de la nouvelle année 2022, un bug du logiciel de messagerie électronique Microsoft Exchange a empêché la livraison de nombreux mails. Le logiciel utilisait un entier signé représenté en complément à deux sur 32 bits pour représenter la date. Les deux premiers chiffres (en partant de la gauche) correspondant à l’année depuis l’an 2000, les deux suivants au mois, etc.

  1. A l’aide d’une calculatrice, déterminer le plus grand entier qui puisse être représenté en complément à deux sur 32 bits.
  2. Expliquer pourquoi le bug a eu lieu lors du passage de 2021 à 2022.
  3. Il a été proposé comme correction de représenter la date à l’aide d’un entier non signé sur 32 bits. En quelle année cela entrainera à nouveau un bug ?

    Cette façon de représenter les dates n’est en général pas utilisé car jugée peu efficace et problèmatique.

Quels sont le plus petit et le plus grand nombre que l'on peut écrire en complément à 2 sur :

  1. 16 bits
  2. 32 bits
  3. 64 bits

Python

Écrire un ensemble de fonctions en python effectuant les opérations suivantes. Les nombres binaires sont représentés sur $N = 8$ bits par des listes de $8$ chiffres 0 ou 1, dont le bit de poids fort est le premier élément de la liste. Vous écrirez avec soin la documentation de chaque fonction et vous écrirez les tests adéquats à l'aide des exemples vus en cours et en exercice. Vous prendrez également soin de gérer les erreurs arithmétiques (dépassement de capacité et résultats erronés par exemple).

  • binaire(n) : renvoie la représentation binaire de l'entier $n$ en complément à 2 sur 8 bits ;
  • complement(b) : renvoie le complément à 2 du nombre binaire b ;
  • somme(b1, b2) : renvoie le nombre binaire résultant de l'addition de b1 et de b2 ;
  • difference(b1, b2) : renvoie le nombre binaire résultant de la soustraction de b1 à b2 ;
  • base10(b) : renvoie l'entier $n$ dont b est la représentation en complément à 2 sur $8$ bits.

ASCII

Donner le codage en ASCII (en base 10), du message suivant ci-dessous (attention à bien respecter le saut de ligne) :

⚙️ Résultat
Hello
World !

Mystere

On considère la fonction mystere dont on donne le code ci-dessous.

🐍 Code Python
1
2
def mystere (c):
    return chr(ord(c) - (ord("A") - ord("a")))
  1. Que renvoie mystere("p") ?
  2. Que permet de faire la fonction mystere ?

Recopier et compléter le corps de la fonction suivante :

🐍 Code Python
1
2
3
4
5
6
7
8
def min_ascii(c):
    """ str -> bool
    c est une chaîne de caractères
    Renvoie True si c est un caractère minuscule, False sinon """

assert min_ascii ("a") == True
assert min_ascii ("A") == False
assert min_ascii ("é") == False
  1. Une de ces séries d’octets ne correspond pas à un codage UTF-8, laquelle ?

    1. 11010101 10111111
    2. 11110110 10110110 10101010 10010111
    3. 00111011
    4. 11101011 10110101
    5. Quelle affirmation est vraie concernant le codage UTF-8 des caractères ?
    6. Le codage UTF-8 est sur 1 à 4 octets.
    7. Le codage UTF-8 est sur 8 octets.
    8. Le codage UTF-8 est sur 8 bits.
    9. Le codage UTF-8 est sur 7 bits.
    10. Sur combien d’octet sera stocké le message suivant en UTF-8 ? Ça coûte 2€ !

    11. 13

    12. 10
    13. 17
    14. 52