Il ya longtemps, très longtemps... Nous avons découvert comment nous pouvions convertir du binaire vers un entier relatif et réciproquement. Ici, nous allons découvrir qu'on peut convertir du binaire en entier relatif.
Une première idée serait de coder le signe + par un 0 et le signe - par un 1. Ainsi 6(10) = 110(2) se coderait alors en 0110(2) mais -6(10) se coderait alors en 1110(2)
Représenter 14(10) en binaire. Que remarquez vous?
Par conséquent nous allons devoir nous fixer un nombre de bits n,un espace mémoire. On conserve alors le premier pour le signe et les n-1 autres pour le codage de la valeur absolue du nombre.
Ainsi sur 8 bits -6(10) se code en 10000110
Déterminer le codage en binaire sur 8 bits puis sur 9 bits, des nombre suivants :
Un premier problème avec cette représentation est que le chiffre 0(10) a deux représentations. En effet sur 3 bits: 0(10) =000(2) et 0(10)=100(2)
Un autre problème se pose avec cette méthode sur l'addition de deux nombres en binaires.
Reprenez la représentation en binaire de -35 sur 8 bits et ajouter la à la représentation de 35 sur 8 bits.
Oubliez donc cette option !
La représentation d'un nombre entier naturel en binaire se fait de la même manière que dans le paragraphe précédent.
Si on dispose de n bits, le premier sera 0 pour indiquer que l'entier est positif. Les n-1 autres seront le codage en binaire de l'entier.
Cela signifie aussi que si l'on dispose de n bits, nous ne pourrons pas dépasser un entier plus grand que 2^(n-1)-1. Puisque nous ne disposons que de n-1 bits.
Si l'on dispose de 5 bits. On a 12(10) = 01100(2)
Si on dispose que de 4 bits. On ne peut tout simplement coder 12 en binaire si nous considérons les entiers relatifs.
Rappelez vous que sur n bits un entier naturel ne pouvait pas dépasser 2^n−1. Quand nous codons des entiers relatifs, nous ne pourrons pas dépasser 2^(n−1)−1 sur n bits.
Pour représenter un entier négatif nous allons utiliser le "complément à deux":
Voila la procédure :
Traitons le cas de −12 sur 8 bits :
12(10)=1100(2). Nous sommes sur 8 bits donc il faut écrire 12(10)=00001100(2). On remplace tous les 0 par des 1 et les 1 par des 0 : 00001100(2) devient 11110011(2) On ajoute 1 :11110011 + 00000001 = 11110100 Vérifions le résultat en ajoutant -12 et 12 dans leur représentation binaire: 11110100+00001100 = 100000000 Nous sommes sur 8 bits le 1 à la première position doit être enlevé. Nous retombons bien sur 0.>
Avec n bits nous pouvons coder uniquement des entiers compris entre -(2^(n-1)-1) et 2^(n-1)-1
C'est le cas puisque le premier bit est réservé au signe de l'entier.
Ecrire une fonction en Python dec_en_binaire(entier,nb_bit)
qui converti un entier naturel en binaire. La fonction renverra le binaire sous forme de liste sur nb_bit.
Des méthodes utiles :
a%b
renvoie le reste de la division de a par b
a//b
renvoie le quotient de la division de a par b
l.append(a)
ajoute à la liste l l'élément a
l.reverse()
inverse les éléments d'une listeEcrire une fonction en Python
dec_relatif_en_binaire(entier,nb_bit)
qui converti un entier relatif en binaire sur nb_bit
.
change_0_en_1(l)
qui remplace les 1 en 0 et les 0 en 1 dans une liste. ne contenant que des 0 et des 1. ajoute_1(lst)
qui ajoute 1 à un binaire représenté dans une liste
dec_relatif_en_binaire(entier,nb_bit)
abs()
pour la valeur absolue d'un nombre.
Il faut bien distinguer le nombre binaire de sa représentation en binaire.
1210=11002 mais en représentation en complément à 2 sur 4 bits 11002=−4