Le complément à deux
Représenter des nombres négatifs en binaire
En binaire, on représente naturellement les nombres positifs. Mais comment représenter des nombres négatifs ?
La solution la plus répandue est le complément à deux.
Le complément à deux permet d'utiliser les mêmes circuits pour faire des additions et des soustractions, que les nombres soient positifs ou négatifs.
Principe
On choisit une taille fixe en bits (souvent 8, 16, 32 ou 64 bits). Le bit le plus à gauche est appelé bit de signe :
0
signifie que le nombre est positif1
signifie que le nombre est négatif
Le complément à deux permet de coder les entiers de à pour bits.
Par exemple, sur 8 bits :
- min :
- max :
Calcul du complément à deux
Pour coder un nombre négatif sur bits :
- On code en binaire (positif) sur bits
- On inverse tous les bits (complément à un)
- On ajoute 1 au résultat
Complément à deux de (sur 8 bits) :
- :
00000101
- Inversion :
11111010
- +1 :
11111011
➜ c'est ça, la représentation de-5
!
Pourquoi ça marche ?
Parce qu'on obtient un comportement cohérent avec l'addition binaire :
TODO
Attention en Python !
En Python, les entiers ne sont pas limités à 8 bits. Ainsi :
~255 = -256
Cela peut provoquer des erreurs si on attend un résultat sur 8 bits.
Pour simuler une opération sur 8 bits en Python :Cela permet de garder uniquement les 8 bits de droite (comme un octet).
(~x) & 255
Complément à deux et bornes
Sur 8 bits, les valeurs possibles sont :
Binaire | Décimal |
---|---|
00000000 | 0 |
00000001 | 1 |
01111111 | 127 |
11111111 | -1 |
11111110 | -2 |
10000000 | -128 |
En complément à deux sur 8 bits, il y a autant de nombres négatifs que positifs - sauf qu'il y a un négatif de plus.