calcul

C1-REDO-04 : Opérations en binaire et en hexadécimal#

Objectifs pédagogiques#

  • réviser les conversion de bases 2, 10 et 16

  • être capable d’exécuter les opérations suivantes en binaire et en héxadécimal:

    • addition

    • soustraction

    • multiplication

    • division

Convention : les bases en indices#

Par convention, nous plaçons la base du nombre entier en indice de celui-ci :

  • \(100_{10}\) signifie le nombre 100 en base 10

  • \(100_{2}\) signfie le nombre 100 en base 2

  • \(100_{16}\) signifie le nombre 100 en base 16

Valeur décimale

Valeur binaire

valeur héxadécimale

\(100_{10}\)

\(1100100_{2}\)

\(64_{16}\)

\(4_{10}\)

\(100_{2}\)

\(4_{16}\)

\(256_{10}\)

\(100000000_{2}\)

\(100_{16}\)

Rappel : Notation de droite à gauche#

La position du chiffre correspond à la puissance de la base.

Base 10 (décimal)#

En décimal, il existe 10 symboles pour écrire les nombres entiers : \([0,1,2,3,4,5,6,7,8,9]\). Ainsi :

position

7

6

5

4

3

2

1

0

puissance

\(10^7\)

\(10^6\)

\(10^5\)

\(10^4\)

\(10^3\)

\(10^2\)

\(10^1\)

\(10^0\)

décimal

\(10000000_{10}\)

\(1000000_{10}\)

\(100000_{10}\)

\(10000_{10}\)

\(1000_{10}\)

\(100_{10}\)

\(10_{10}\)

\(1_{10}\)

Ainsi, le nombre \(2017\) lu de droite à gauche se calcule : \(7*10^{0} + 1*10^{1} + 0*10^{2} + 2*10^{3} = 7 + 10 + 0 + 2000 = 2017\)

Base 2 (binaire)#

En décimal, il existe 2 symboles pour écrire les nombres entiers : \([0,1]\).

position

7

6

5

4

3

2

1

0

puissance

\(2^7\)

\(2^6\)

\(2^5\)

\(2^4\)

\(2^3\)

\(2^2\)

\(2^1\)

\(2^0\)

binaire

\(10000000_{2}\)

\(1000000_{2}\)

\(100000_{2}\)

\(10000_{2}\)

\(1000_{2}\)

\(100_{2}\)

\(10_{2}\)

\(1_{2}\)

décimal

\(128_{10}\)

\(64_{10}\)

\(32_{10}\)

\(16_{10}\)

\(8_{10}\)

\(4_{10}\)

\(2_{10}\)

\(1_{10}\)

Ainsi, le nombre \(10101101\) lu de droite à gauche se calcule en base 10 : \(1_{2}*2_{10}^{0} + 0_{2}*2_{10}^{1} + 1_{2}*2_{10}^{2} + 1_{2}*2_{10}^{3} + 0_{2}*2_{10}^{4} + 1_{2}*2_{10}^{5} + 0_{2}*2_{10}^{6} + 1_{2}*2_{10}^{7} = 1_{10} + 0_{10} + 4_{10} + 8_{10} + 0_{10} + 32_{10} + 0_{10} + 128_{10} = 173_{10}\)

Le bit le plus à droite s’appelle bit de poids faible

Le bit le plus à gauche s’appelle bit de poids fort

Base 16 (hexadécimal)#

En héxadécimal, il existe 16 symboles pour écrires les nombres entiers : \([0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F]\). Puisque \(16_{10} = 2_{10}^{4}\) il faut quatre bits pour convertir un nombre héxadécimal en binaire.

Valeur décimale

Valeur binaire

valeur héxadécimale

\(0_{10}\)

\(0000_{2}\)

\(0_{16}\)

\(1_{10}\)

\(0001_{2}\)

\(1_{16}\)

\(2_{10}\)

\(0010_{2}\)

\(2_{16}\)

\(3_{10}\)

\(0011_{2}\)

\(3_{16}\)

\(4_{10}\)

\(0100_{2}\)

\(4_{16}\)

\(5_{10}\)

\(0101_{2}\)

\(5_{16}\)

\(6_{10}\)

\(0110_{2}\)

\(6_{16}\)

\(7_{10}\)

\(0111_{2}\)

\(7_{16}\)

\(8_{10}\)

\(1000_{2}\)

\(8_{16}\)

\(9_{10}\)

\(1001_{2}\)

\(9_{16}\)

\(10_{10}\)

\(1010_{2}\)

\(A_{16}\)

\(11_{10}\)

\(1011_{2}\)

\(B_{16}\)

\(12_{10}\)

\(1100_{2}\)

\(C_{16}\)

\(13_{10}\)

\(1101_{2}\)

\(D_{16}\)

\(14_{10}\)

\(1110_{2}\)

\(E_{16}\)

\(15_{10}\)

\(1111_{2}\)

\(F_{16}\)

Exercice 1 : Conversion binaire - décimal - héxadécimal#

Complétez le tableau suivant. Lorsque le nombre de bits n’est pas divisible par 4 en binaire, ajoutez des \(0\) sur les bits de poids le plus fort (à gauche) pour complèter au multiple.

Valeur binaire

Valeur décimale

valeur héxadécimale

\(11010101_{2}\)

\(1984_{10}\)

\(BEEF_{16}\)

\(51966_{10}\)

\(100101110_{2}\)

Opérations algébriques en binaire#

Les 4 opérations de base en algèbre sont :

  • l’addition (signe \(+\))

  • la soustration (signe \(-\))

  • la multiplication (signe \(*\))

  • la division (signe \(/\))

Addition#

Tout comme l’addition décimale, l’addition en binaire se fait en colonne et en utilisant les retenues (binaires !).

En binaire : \(01_{2} + 01_{2} = 10_{2}\). Si la retenue requiert un bit de poid plus fort (à gauche), alors il faut en ajouter un.

Exemple : \(1010_{2} + 0011_{2}\)

1

1

0

1

0

0

0

1

1

1

1

0

1

Soustraction#

Dans la soustraction binaire, on procède comme en décimal. Lorsque la quantité à soustraire est supérieure à la quantité dont on soustrait, on emprunte 1 au voisin de gauche.

Exemple : \(0_{2} - 0_{2} = 0_{2}\), \(1_{2} - 0_{2} = 1_{2}\), \(1_{2} - 1_{2} = 0_{2}\) et \(10_{2} - 1_{2} = 1_{2}\)

Multiplication#

La multiplication en binaire peut rapidement devenir complexe et dépasse le cadre de ce cours. Nous nous concentrons sur la multiplication par 2 puiqu’elle ne requiert qu’un déplacement (shift en anglais) à droite en direction du bit de poid le plus fort.

Exemple : \(1011_{2}\) multiplié par \(10_{2}\) (\(= 2_{10}\)) vaut \(10110_{2}\)

Division#

Tout comme la multiplication, la division binaire peut devenir complexe. Nous nous concentrons sur la division par 2 qui ne requiert qu’un déplacement (shift en anglais) à gauche en direction du bit de poids le plus faible. Cela ne fonctionne qu’avec les nombres pair.

Exemple : \(0100_{2}\) divisé par \(10_{2}\) (\(= 2_{10}\)) vaut \(0010_{2}\)

Pour aller plus loin : Exécuter l’opération division avec un diviseur autre que \(10_{2}\) se résoud de la même façon qu’en décimal. La seule différence est que l’on indique si oui ou non le diviseur peut se trouver dans le dividende.

Exercice 2 : opérations#

Résolvez les calculs binaires suivants :

  • \(11010101_{2}\) + \(00001111_{2}\)

  • \(01101010_{2}\) - \(00011010_{2}\)

  • \(11010010_{2}\) divisé par \(10_{2}\)

  • \(01011110_{2}\) multiplié par \(10_{2}\)

Au-delà des entiers (pour aller plus loin)#

De \(\mathbb{N}\) vers \(\mathbb{Z}\)#

Que vaut le résultat de l’opération suivante ?

\(00001000_{2} - 00010000_{2}\)

Un nombre entier (\(\mathbb{N}\)) ne peut pas être négatif. Le résultat de l’opération est \(-8_{10}\) et c’est un nombre relatif (\(\mathbb{Z}\)) . Il s’agit donc de trouver un système pour représenter les nombres négatifs. Il en existe plusieurs, mais le plus intuitif est de choisir un bit (généralement celui de poids le plus fort) et de définir si il représente le signe \(+\) ou le signe \(-\). Ce faisant, il ne reste plus que \(n-1\) bits pour coder les entiers relatifs, donc une puissance de deux en moins. Sur un Octet, on code ainsi toujours 255 entiers relatifs qui vont de \(-127_{10}\) à \(127_{10}\) puisqu’il ne reste que \(7\) bits.

Si \(0\) représente le signe \(+\) et \(1\) le signe \(-\) alors :

  • \(00001001_{2}\) représente \(9_{10}\) alors que \(10001001_{2}\) représente \(-9_{10}\)

  • \(00000000_{2}\) et \(10000000_{2}\) représentent tous les deux \(0_{10}\). Et c’est un problème !

De \(\mathbb{N}\) vers \(\mathbb{Q}\)#

Que vaut le résultat de l’opération suivante ?

\(00000101 / 00000010\)

Un nombre entier (\(\mathbb{N}\)) ne peut pas être rationnel. Le résultat de l’opération est \(2.5_{10}\) et c’est un nombre rationnel (\(\mathbb{Q}\)). Il s’agit de trouver une représentation pour les nombres rationnels (ou nombres à virgule). Il en existe deux:

  1. La représentation à virgule fixe

  2. La représentation à virgule flottante

Ces représentations vont au-delà du cadre de ce cours et seront abordé en 2ème année de l’école de maturité.