pythonListSelfTest1
Je teste mes connaissances :
Nombres relatifs et réels en binaire
base hexadécimale.

Exercice 1

Convertir -22(10) en binaire et 10011011(2) en décimal (Nombres en complément à 2)

>>> Proposition de solution - Proposition de solution - Proposition de solution <<<

Soit à convertir -22(10) en binaire (complément à 2)

Soit à convertir 10011011(2) en base 10(complément à 2 sur 8 bits)


Exercice 2

Convertir 117(10) en héxadécimal et 41(16) en décimal ainsi que 5C(16) en binaire.

>>> Proposition de solution - Proposition de solution - Proposition de solution <<<

Convertir 117(10) en héxadécimal.

117 Div 16 = 7 x 16 + 5 soit  (112 +5 = 117)
Donc 117(10) = 75(16)

Convertir 41(16) en décimal.

41(16) = (4 x 161 + 1 x 160)(10) = (64+1)(10) = 65(10) 

Convertir 5C(16) en binaire.

5C(16) se décompose en 2 quartets 5(16)  et  C(16)
5(16) = 0101(2)
C(16) = 12(10) = 1010(2)
Soit 5C(16) = 01011010(2)

Exercice 3

Décoder 0.10110000(2) en base 10.

>>> Proposition de solution - Proposition de solution - Proposition de solution <<<
0.10110000(2) = (2−1 + 2−3 + 2−4)(10) = (0.5 + 0.125 + 0.0625)(10) = (0, 6875)(10)						

Exercice 4

Convertir 0,85(10) en format binaire 8 bits.

Convertir 0.11011001(2) en décimal.

Quelle remarque pouvez-vous faire ?

>>> Proposition de solution - Proposition de solution - Proposition de solution <<<
0,85 (10) = 0.11011001(2)
En effet :
0.85 × 2 = 1.7 --> 1
0.7 × 2 = 1.4 --> 1
0.4 × 2 = 0.8 --> 0
0.8 × 2 = 1.6 --> 1
0.6 × 2 = 1.2 --> 1
0.2 × 2 = 0.4 --> 0
0.4 × 2 = 0.8 --> 0
0.8 × 2 = 1.6 --> 1
On a obtenu nos 8 bits mais le dernier résultat n'est pas à zéro....
0.11011001(2) = (2−1 +2−2 +2−4 +2−5 +2−8)(10) 
soit (0.5+0.25+0.0625+0.03125+0.00390625)(10) = (0,84765625)(10)

Les 2 valeurs binaires sont les mêmes !

Pourtant 0,85 n'est pas égal à 0, 84765625 (problème de précisions)

Norme IEEE754

Exercice 5

Coder 40(10) au format IEEE 754 en simple précision.

>>> Proposition de solution - Proposition de solution - Proposition de solution <<<
Bit de signe : + --> 0
Représentation binaire de 40(10) -->  101000(2) (valeur absolue)
Normalisation : 1.01000 × 25 soit 1.M × 25  (M : Matisse)
Exposant réel (effectif) : 5
Exposant décalé (codage sur 8 bits) : (5 + 127)(10) = (132)(10 )= 10000100(2)
Mantisse sur 23 bits soit M : 01000000000000000000000(2)
Notre nombre devient donc : [0] [10000100] [01000000000000000000000](2) Soit  42200000(16)
Soit 01000010001000000000000000000000(2) =  42200000(16)

Exercice 6

Coder 13,625(10) au format IEEE 754 en simple précision.

>>> Proposition de solution - Proposition de solution - Proposition de solution <<<
Bit de signe : (+) --> 0 Représentation binaire : 1101.101(2) (valeur absolue) Normalisation : 1.101101 × 23 Exposant réel (effectif) : 3 Exposant décalé (normalisé) sur 8 bits : 3 + 127(10) = 130(10) = 10000010(2) 1.M (Mantisse) 1.10110100000000000000000 Mantisse sur 23 bits : 10110100000000000000000 Ce qui nous donne [0][10000010][10110100000000000000000] Soit 01000001010110100000000000000000(2) = 415A000016

Exercice 7

Effectuer l'addition suivante C0880000(16) + 41680000(16) (format IEEE 754 en simple précision)

Conseil : Avant de procéder à l’addition on doit mettre le plus petit des deux nombres au même exposant que le plus grand, et vérifier les signes.

>>> Proposition de solution - Proposition de solution - Proposition de solution <<<
C(16)= 1010(2)  donc nombre négatif.
4(16)= 0100(2)  donc nombre positif.
Un positif et un négatif : on devra faire une soustraction
Exposant décalé de C0880000 = 100 0000 1 = (65)10
Exposant décalé de 41680000 = 100 0001 0 = (66)10
Le plus petit (valeur absolue) est donc : C0880000, on doit ajouter 1 = 10000010-
10000001 `a son exposant
L’opération à effectuer est donc : 1.1101 - 0.10001 = 1.01001, le résultat est positif
car 1.1101 > 0.10001, et l’exposant (décalé) est 100 0001 0
Ce qui donne 0100 0001 0010 0100 0000 0000 0000 0000 en binaire, soit 41 24 00 00 en hexadécimal.

Contribution : Ne pas hésiter à proposer des énoncés d'exercices ... Avec corrections ;)