Vous êtes sur la page 1sur 19

Représentation et codage de l’information

2. entiers - entiers signés

Pierre Réty
Janvier 2021
L1 informatique — Université d’Orléans
0010010101010000
0100010001000110
0010110100110001
0010111000110101
000010100010010…
Rappels…

Toute information numérique (par exemple le contenu d’un


fichier) est codée comme une suite de bits.

On affiche souvent une suite de bits sous la forme d’un


nombre hexadécimal (c’est plus court).
110010101111111001000010 = cafe4216

Un fichier texte est la suite des codages ASCII, sur un octet,


des caractères et sauts de ligne qui composent le message.

B O W T I E S A R E C O O L .
424f 5720 5449 4553 2041 5245 2043 4f4f 4c2e

1
Représentation des entiers naturels
Représenter les entiers naturels

En base 2.

2
Calculer en base 𝑘

Les quatre opérations arithmétique usuelles (+, ×, −, /) se


posent en base 𝑘 comme en décimal.

En pratique, on a besoin des tables d’addition et de


multiplication des chiffres de la base.

Les unités arithmétiques et logiques des processeurs mettent


en œuvre ces méthodes de calcul… ou des algorithmes plus
efficaces (en nombre de portes logiques).

PS L’outil bc sous Linux permet de calculer en toute base.

3
Tables en base 2

+ 0 1 × 0 1
0 0 1 0 0 0
1 1 10 1 0 1

La base 2 c’est facile ! Pas de retenue pour la multiplication.

Exemple : 1112 + 112 . C’est comme en base 10, mais avec la table
11
111
111
d’addition de la base 2. + 11 Avec retenues en rouge :
+ 11
=
= 1010
Ainsi, 1112 + 112 = 10102 , c’est à dire 7 + 3 = 10.

4
Tables en base 8

+ 1 2 3 4 5 6 7 * 1 2 3 4 5 6 7
1 2 3 4 5 6 7 10 1 1 2 3 4 5 6 7
2 3 4 5 6 7 10 11 2 2 4 6 10 12 14 16
3 4 5 6 7 10 11 12 3 3 6 11 14 17 22 25
4 5 6 7 10 11 12 13 4 4 10 14 20 24 30 34
5 6 7 10 11 12 13 14 5 5 12 17 24 31 36 43
6 7 10 11 12 13 14 15 6 6 14 22 30 36 44 52
7 10 11 12 13 14 15 16 7 7 16 25 34 43 52 61

41
74 ∗ 51
donc 748 + 738 = 1678 donc 418 ∗ 518 = 25118
+ 73 41
càd 60 + 59 = 119 càd 33 ∗ 41 = 1353
= 167 245
= 2511
5
Addition en base 16

+ 1 2 3 4 5 6 7 8 9 a b c d e f
1 2 3 4 5 6 7 8 9 a b c d e f 10
2 3 4 5 6 7 8 9 a b c d e f 10 11
3 4 5 6 7 8 9 a b c d e f 10 11 12
4 5 6 7 8 9 a b c d e f 10 11 12 13
5 6 7 8 9 a b c d e f 10 11 12 13 14
6 7 8 9 a b c d e f 10 11 12 13 14 15
7 8 9 a b c d e f 10 11 12 13 14 15 16
8 9 a b c d e f 10 11 12 13 14 15 16 17
9 a b c d e f 10 11 12 13 14 15 16 17 18
a b c d e f 10 11 12 13 14 15 16 17 18 19
b c d e f 10 11 12 13 14 15 16 17 18 19 1a
c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b
d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c
e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d
f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 6
Multiplication en base 16

* 1 2 3 4 5 6 7 8 9 a b c d e f
1 1 2 3 4 5 6 7 8 9 a b c d e f
2 2 4 6 8 a c e 10 12 14 16 18 1a 1c 1e
3 3 6 9 c f 12 15 18 1b 1e 21 24 27 2a 2d
4 4 8 c 10 14 18 1c 20 24 28 2c 30 34 38 3c
5 5 a f 14 19 1e 23 28 2d 32 37 3c 41 46 4b
6 6 c 12 18 1e 24 2a 30 36 3c 42 48 4e 54 5a
7 7 e 15 1c 23 2a 31 38 3f 46 4d 54 5b 62 69
8 8 10 18 20 28 30 38 40 48 50 58 60 68 70 78
9 9 12 1b 24 2d 36 3f 48 51 5a 63 6c 75 7e 87
a a 14 1e 28 32 3c 46 50 5a 64 6e 78 82 8c 96
b b 16 21 2c 37 42 4d 58 63 6e 79 84 8f 9a a5
c c 18 24 30 3c 48 54 60 6c 78 84 90 9c a8 b4
d d 1a 27 34 41 4e 5b 68 75 82 8f 9c a9 b6 c3
e e 1c 2a 38 46 54 62 70 7e 8c 9a a8 b6 c4 d2
f f 1e 2d 3c 4b 5a 69 78 87 96 a5 b4 c3 d2 e1 7
Ordre des bits

Comment les données codées sur plusieurs octets sont-elles


stockées en mémoire ? dans un fichier ?

Plusieurs conventions existent, les deux plus courantes :

Gros-boutiste (big-endian) CAFEBABE16 est stocké comme la


suite d’octets CA FE BA BE.

Petit-boutiste (little-endian) CAFEBABE16 est stocké comme


la suite d’octets BE BA FE CA.

Pour compliquer un peu l’affaire, l’unité d’ information est


parfois de 16 bits (CAFE BABE vs BABE CAFE).

8
Entiers signés codés sur 𝑘 bits
4 représentations possibles
Bit de signe

Bit de signe (à gauche) : 𝑠 = 1 signifie négatif.

𝑘−1
𝑠𝑎𝑘−1 … 𝑎1 𝑎0 = (−1)𝑠 × ∑ 𝑎𝑖 2𝑖
𝑖=0

Sur 𝑘 bits, on code les entiers allant de −(2𝑘−1 − 1) à 2𝑘−1 − 1.

Problème : Il y a deux représentants pour le zéro : 0 et −0.


L’arithmétique dépend des signes. Calcul du successeur ?

Exemple sur 8 bits : résultat en bleu. 𝑠 est le bit de signe.


37 = 32 + 4 + 1 = 1001012 = 𝑠0100101 = 00100101 et −37 = 𝑠0100101 = 10100101

9
Décalage

Au lieu de coder 𝑥 qui peut être négatif, on ajoute un nombre


positif 𝑁 (décalage) tel que 𝑥 + 𝑁 soit positif ou nul.
On code alors 𝑥 + 𝑁 en base 2 sur 𝑘 bits.

Sur 𝑘 bits, on prend généralement 𝑁 = 2𝑘−1 − 1.


Ainsi on code les entiers allant de −(2𝑘−1 − 1) à 2𝑘−1 .

Remarque : L’opposé de 2𝑘−1 n’est pas représentable.


Remarque : Bit gauche à 1 signifie strictement positif.

Exemple sur 8 bits : résultat en bleu. Décalage de 28−1 − 1 = 127.


37 + 127 = 164 = 128 + 32 + 4 = 101001002 . Donc 37 = 10100100
−37 + 127 = 90 = 64 + 16 + 8 + 2 = 10110102 . Donc −37 = 01011010

10
Complément à 1

La représentation en complément à 1 consiste à inverser tous


les bits d’un nombre pour obtenir son opposé.
opposé(𝑥) = (2𝑘 − 1) − 𝑥.

Le bit de gauche indique le signe. 1 signifie négatif.


Sur 𝑘 bits, on code les entiers allant de −(2𝑘−1 − 1) à 2𝑘−1 − 1.

Problème Il y a deux représentant pour le zéro : 0 et −0. Les


additions sont compliquées.

Exemple sur 8 bits : résultat en bleu. 37 = 32 + 4 + 1 = 1001012 = 00100101


Donc −37 = opposé(37) = comp1 (00100101) = 11011010

11
Complément à 2

La représentation en complément à 2 (en fait complément à 2𝑘 )


calcule le complément à 1, puis ajoute 1 à la valeur obtenue.
opposé(𝑥) = ((2𝑘 − 1) − 𝑥) + 1 = 2𝑘 − 𝑥.
Sur 𝑘 bits, on code les entiers allant de −2𝑘−1 à 2𝑘−1 − 1.

Rem : L’opposé de 100…0 (i.e. −2𝑘−1 ) n’est pas représentable.


Rem : Le bit de gauche indique le signe. 1 signifie négatif.

L’arithmétique est la même que pour les entiers naturels !


C’est la représentation usuelle moderne des entiers signés !

Exemple sur 8 bits : résultat en bleu. 37 = 32 + 4 + 1 = 1001012 = 00100101


−37 = opposé(37) = comp2 (00100101) = comp1 (00100101) + 1 = 11011010 + 1 =
11011011
12
Avec le complément à 2

Addition Utiliser l’addition des nombres non signés.

Soustraction Additionner l’opposé.

Extension de signe Pour passer de 𝑘 à 𝑙 > 𝑘 bits, on recopie


𝑙 − 𝑘 fois le bit de poids fort (bit de gauche).

Comparaison Une fois inversé le bit de poids fort, on compare


comme des non signés.

Dépassement de capacité L’addition de deux nombres de


signes opposés ne produit pas de dépassement, sinon elle se
détecte en regardant le signe du résultat.
13
Sur 𝑘 = 3 bits

décimal bit de signe décale de 2𝑘−1 −1 = 3 comp1 comp2


4 7 111 7 7
3 011 110 011 011
2 010 101 010 010
1 001 100 001 001
0 000 011 000 000
-0 100 7 111 7
-1 101 010 110 111
-2 110 001 101 110
-3 111 000 100 101
-4 7 7 7 100

14
Exemple de décodage sur 8 bits

𝑚 = 01001101

Bit de signe, comp1, comp2 : 𝑚 = 10011012 = 1 + 4 + 8 + 64 = 77

Décalage de 127 : 𝑚 = 010011012 − 127 = 77 − 127 = −50

—————————————————————————————————————

𝑚′ = 11001101

Bit de signe : 𝑚′ = opposé(10011012 ) = opposé(77) = −77

Décalage de 127 : 𝑚′ = 110011012 − 127 = 1 + 4 + 8 + 64 + 128 − 127 = 78

Comp1 :
𝑚′ = opposé(comp1 (11001101)) = opposé(001100102 ) = −(2 + 16 + 32) = −50

Comp2 :
𝑚′ = opposé(comp2 (11001101)) = opposé(001100112 ) = −(1 + 2 + 16 + 32) = −51

15

Vous aimerez peut-être aussi