03 Exos Représentation entiers relatifs Correction
Entiers positifs ou négatifs⚓︎
Exercice 1⚓︎
Pour les entiers naturels :
-
Quel est le nombre binaire après \(10011011\) ?
\(10011011 + 1 = 10011100\) -
Combien de mots binaires (nombres en binaire) différents peut-on former avec \(8\) bits ?
\(2^{8} = 256\) nombres différents. -
Quel intervalle de nombres entiers naturels peut-on représenter sur \(8\) bits ?
\(2^{8}\) nombres de \(0\) à \(2^{8} - 1 = 255\). -
Combien de bits au minimum faut-il pour coder en binaire le nombre \(120\) ?
\(7\) bits suffisent, car \(2^{6} <= 120 < 2^{7}\).
Exercice 2⚓︎
Pour les entiers relatifs, codés en complément à 2 sur 8 bits :
-
De quel signe est le nombre codé \(10011011\) ?
négatif car il commence par un \(1\). -
Quel est le nombre binaire après \(10011011\) ?
\(10011011 + 1 = 10011100\) -
De quel signe est le nombre codé \(1011011\) ?
Attention, on n'a écrit que \(7\) chiffres. Sur \(8\) bits, il s'écrit en fait \(01011011\).
Il est donc positif car il commence par un \(0\). -
Combien de nombres relatifs différents peut-on former avec \(8\) bits ?
\(2^{8} = 256\) nombres différents. -
Quel intervalle de nombres entiers relatifs peut-on représenter sur \(8\) bits ?
\(2^{8}\) nombres de \(-2^{7} = -128\) à \(2^{7} - 1 = 127\). -
Combien de bits au minimum faut-il pour coder en complément à 2 le nombre \(120\) ?
Il faut \(8\) bits, car \(2^{6} <= 120 < 2^{7}\), et qu'on a toujours \(1\) bits en plus pour les relatifs... -
Combien de bits au minimum faut-il pour coder en complément à 2 le nombre \(-120\) ?
C'est pareil : il faut \(8\) bits, car \(2^{6} <= 120 < 2^{7}\), et qu'on a toujours \(1\) bits en plus pour les relatifs... -
En codage en complément à deux sur \(1\) octet, le codage de \(-20\) est le même que le codage binaire de quel nombre positif ?
\(-20 + 256 = 236\)
Exercice 3⚓︎
Écrire les opposés en base 2 d’entiers signés écrits en base 2.
-
Comment écrit-on en base 2 signée sur 1 octet l’opposé de 01000110.
L'opposé de \(01000110\) est \(10111001 + 1 = 10111010\) -
Comment écrit-on en base 2 signée sur 1 octet l’opposé de 10110111.
\(10110111\) est négatif.
L'opposé de \(10110111\) est le complément à \(1\) de \(10110110\), c'est-à-dire \(01001001\). -
Comment écrit-on en base 2 signée sur 1 octet l’opposé de 10110110.
\(10110110\) est négatif, c'est \(1\) de moins que le précédent.
L'opposé de \(10110110\) est \(01001010\).
Exercice 4⚓︎
Convertir en base 10 un entier signé écrit en base 2
-
Donner en base 10 la valeur de 11001100 considéré comme un octet signé.
\(11001100_2 = 204_{10}\), donc \(11001100\) représente \(204 - 256 = -52\). -
Donner en base 10 la valeur de 11100000 considéré comme un octet signé.
\(11100000_2 = 224_{10}\), donc \(11100000\) représente \(224 - 256 = -32\).
Exercice 5⚓︎
Convertir en base 2 un entier signé écrit en base 10
Représenter en complément à 2 sur 8 bits les entiers -100 ; 83 et -29.
\(-100\) doit être représenté comme l'entier naturel \(-100 + 256 = 156\), donc par \(10011100\).
autre manière :
\(100\) est représenté sur 8 bits par \(01100100\), et le complément à \(2\) est \(10011100\).
\(83\) est positif, donc est représenté par \(1010011\).
\(-29\) doit être représenté comme l'entier naturel \(-29 + 256 = 227\), donc par \(11100011\).
autre manière :
\(29\) est représenté sur 8 bits par \(00011101\), et le complément à \(2\) est \(11100011\).
Exercice 6 : Programmation⚓︎
Ecrire en Python une fonction permettant de coder un entier relatif sur \(n\) bits en complément à \(2\).
On reprend la fonction de conversion de la fiche précédente :
def conversion_from_decimal(base, nombre):
"""base est un entier représentant la base d'arrivée
nombre est un entier à convertir
la fonction retourne un string qui représente le nombre converti"""
Lchiffres = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
valeurBase = ''
while nombre != 0:
reste = nombre % base
valeurBase = Lchiffres[reste] + valeurBase
nombre = nombre // base
return valeurBase
et on l'applique à \(x\) quand \(x\) est positif, et à \(2^n + x\) quand \(x\) est négatif.
def conversion_to_signed_binary(nombre, n):
"""nombre est un entier à convertir
en binaire signé codé sur n bits
la fonction retourne un string qui représente le nombre converti"""
if nombre >= 0:
return conversion_from_decimal(2, nombre)
conversion_from_decimal(2, 2**n + nombre)