Nous avons vu que le codage des entiers naturels par une série de bits se fait simplement en prenant l'écriture binaire... quid des entiers négatifs ? La plus élémentaire, jamais utilisée en pratique, consiste à utiliser l'un des bits (le premier) pour représenter le signe. Si l'on prend l'exemple d'un octet, on a alors un bit de signe et sept bits pour coder la valeur absolue (un nombre indépendamment de son signe). Dans ce cas, un même octet peut représenter un nombre entre 0 et 255 ou un nombre entre -127 et +127 (exemple ci-dessous). Ce codage présente deux défauts : l'addition est complexe (il faut traiter quatre cas) et le zéro a deux représentations (-0 et +0).
Exemples :
+82 codé sur un octet : « 0 1010010 »
-82 codé sur un octet avec la méthode du bit de signe : « 1 1010010 »
Les deux représentations de 0 sur 1 octet avec la méthode du bit de signe : « 0 0000000 » et « 1 0000000 »
Pour ces raisons la méthode du bit de signe seul n'est (presque) plus utilisée. Une méthode un peu plus efficiente consiste, pour coder -n, à prendre le complément à un du codage de n, c'est à dire de remplacer chaque 0 par un 1 et inversement. Si l'on prend toujours l'exemple du codage sur un octet, on aura toujours un nombre entre -127 et +127 et toujours deux représentations du zéro, mais l'addition est maintenant plus facile à calculer. On peut démontrer, en effet, que si l'on ajoute un nombre a et le complément à un d'un nombre b, on trouve a-b-1 (aux problèmes de dépassement près). Pour cette raison, la méthode (quasi) universellement choisie aujourd'hui pour représenter les entiers relatifs (positifs et négatifs) est celle du complément à deux : on représente un nombre négatif en prenant son complément à un, puis en ajoutant un à l'écriture binaire obtenue. Dans le cas d'un codage sur un octet, on peut ainsi représenter les nombre entiers de -128 à +127.
Exemples :
+82 codé sur un octet : « 01010010 »
complément à un de +82 sur 1 octet : « 10101101 » (même chose que 255-82)
-82 codé sur 1o = complément à deux de +82 : « 10101110 » (même chose que 256-82)
-82 codé sur deux octets : « 11111111 10101110 »
Si l'on travaille sur un octet, la représentation binaire de -82 (en tant qu'entier positif ou négatif) est donc la même que celle de 256-82 (en tant qu'entier positif), c'est à dire 174. Cela veut dire que « 10101110 » peut coder aussi bien le nombre -82 que le nombre 174. Il peut aussi coder de nombreuses autres choses, par exemple les caractères « ® » (codage latin-1 des caractères) ou « Ž » (codage latin-2 des caractères).
Les nombres à virgule et les grands entiers demandent, eux, des codages plus complexes.