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.
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égatifLe complément à deux permet de coder les entiers de à pour bits.
Par exemple, sur 8 bits :
Pour coder un nombre négatif sur bits :
000001011111101011111011 ➜ c'est ça, la représentation de -5 !Parce qu'on obtient un comportement cohérent avec l'addition binaire :
TODO
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.
(~x) & 255
Sur 8 bits, les valeurs possibles sont :
| Binaire | Décimal |
|---|---|
00000000 | 0 |
00000001 | 1 |
01111111 | 127 |
11111111 | -1 |
11111110 | -2 |
10000000 | -128 |