TD01
TD01
TD01
{alice.pellet___mary,fabrice.mouhartem}@ens-lyon.fr, florent.de-dinechin@insa-lyon.fr
Exercice 1: complément à 2 :
1.1) Comment sont représentés (34)10 et (−42)10 en complément à 2 sur 8 bits ? Et sur 12 bits ?
1.2) Posez l’addition (en binaire) des deux nombres précédents.
1.3) Proposez une règle pour de passer de l’écriture d’un entier relatif en complément à 2 sur p bits à son écriture
sur p + k bits (en conservant l’égalité des valeurs bien entendu). Justifiez votre réponse.
11 10 9 8 7 6 5 4 3 2 1 0
c=
s b m
Si 1 ≤ (b)2 ≤ 14, le nombre représenté est (−1)s × (1, m)2 × 2e , avec e = (b)2 − 23 (on ne se préoccupe pas du codage de
zéro, des sous-normaux, ou des valeurs exceptionnelles ici).
3.1) Comment peut-on représenter x 1 = (11, 1)10 dans le format flottant binaire décrit ci-dessus ? Vous effectuerez
un arrondi au plus proche, et exprimerez votre résultat en binaire puis en hexadécimal.
3.2) On souhaite ajouter les deux flottants x 1 = (1, 1110001)2 × 22 et x 2 = (1, 1100101)2 × 24 : posez l’opération de-
mandée de manière à obtenir le résultat avant arrondi ; donnez ensuite une approximation de x 3 par un flottant
binaire, en effectuant un arrondi au plus proche.
1
5.3) Peut-on définir un codage auto-correcteur de 4 bits utilisant moins de 3 bits supplémentaires ?
5.4) Tentez de généraliser l’algorithme de Hamming à d’autres tailles de mots.
Exercice 6: lecture d’entiers au clavier : On veut mettre au point un morceau de programme pour la lecture d’entiers
naturels au clavier, disons en C pour fixer les idées, mais vous pouvez travailler au niveau algorithmique. Le programme
doit inviter l’utilisateur à entrer un entier naturel en décimal, stocker la saisie sous la forme d’une chaîne de caractères
(tableau de caractères de type char, terminé par un 0 en C), puis calculer la valeur lue dans un entier de type uint16_t
(type d’entiers non-signés 16 bits en C99, défini dans stdint.h). On note n le nombre de chiffres de l’entier lu au
clavier.
6.1) Proposez une première version du programme qui effectue la conversion en commençant par le chiffre de poids
faible. Combien de multiplications effectue la boucle de conversion de votre programme ?
6.2) Proposez une seconde version dans laquelle la chaîne est convertie en commençant par le chiffre de poids fort.
Combien de multiplications effectue la boucle de conversion ?
6.3) Quel est le plus grand entier que l’on peut représenter dans un uint16_t ? Que se passe-t-il si l’utilisateur de
votre programme tente d’entrer un entier plus grand ?
Exercice 7: bonus : Ecrire un programme pour compter le nombre de bits non nuls dans un entier non signé : le coût
doit être proportionnel au nombre de bits non nuls (et pas au nombre de bits dans la représentation).