Représentation des données : les nombres entiers naturels

Objectifs

  • Écriture d'un entier dans une base supérieure à deux

  • Passer d'une représentation d'un nombre d'une base dans une autre.

pré-requis

  • Divisions Euclidiennes

  • Base décimale

Notion de base : la numération décimale (10)

Représentation des entiers dans un ordinateur

Dans le système décimal, on utilise 10 chiffres de 0 à 9. Le système décimal est donc un système de numération de base 10. Ainsi les nombres se décomposent en une somme de facteurs de \(10^n\)

Exemple :

Le nombre 4138 peut s'écrire : 4 × 1000 + 1 × 100 + 3 × 10 + 8 × 1

En partant de la droite :

  • Le 1er chiffre (de rang 0) correspond aux unités : \(10^0 = 1\)

  • Le 2ème chiffre (de rang 1) correspond aux dizaines :\(10^1 =10\).

  • Le 3ème chiffre (de rang 2) correspond aux centaines \(10^2 =100\).

La position (ou rang) de chaque chiffre dans le nombre est importante , elle définit le poids du chiffre

dans le nombre :

  • Le chiffre de poids le plus fort correspond à celui dont la puissance de 10 est la plus grande (coté gauche). C'est ce chiffre qui indique l'ordre de grandeur du nombre

  • Le chiffre de poids le plus faible correspond à celui dont la puissance de 10 est la plus petite (côté droit)

\(10^3\)

\(10^2\)

\(10^1\)

\(10^0\)

4

1

3

8

Chiffre de poids le + fort

Chiffre de poids le + faible

Exemple

décomposer \((265301)_{10}\)

Besoin de l'informatique

Un ordinateur fonctionne grâce à l'usage de transistors.

(mettre une illustration, et éventuellement une capture d'un oscilloscope)

Un transistor ne connaît que deux états :

  • un état électrique dit "bas" qui correspond souvent à une tension électrique proche de zéro volt,

  • l'état électrique "haut" correspond à quelques volts.

Nous pouvons également dire 0 pour faux (quand le courant ne passe pas) et 1 pour vrai (quand le courant passe).

Ce codage est nommé base binaire et est utilisé par l'ordinateur pour comprendre et traiter les données.

Un 0 ou un 1 constitue ce que l'on appelle un bit (binary digit). Dans le processeur (qui traite les données) ou dans la RAM ( Random Access Memory), qui stocke l'information, les bits sont regroupés par paquet de huit. Ce groupe de huit bits est appelé un octet.

Les humains quant à eux travaillent avec dix chiffres, c'est la notation décimale (base 10).

L'hexadécimal (base 16) est également utilisé dans le monde informatique. C'est en effet assez courant de regrouper plusieurs bits (un bit correspond à un "1" ou à un "0") et de les transformer en hexadécimal. Cette transformation permet de faciliter la tache des programmes et des programmeurs.

Par exemple la valeur en binaire \((0011 1010)_2\) est assez dure à mémoriser de tête pour un humain, il est donc judicieux d'utiliser l'hexadécimal pour désigner cette même valeur : \((0011 1010)_2\) est égal en hexadécimal à \((3A)_{16}\) . L'hexadécimal permet une écriture plus condensée du binaire.

RemarqueLes nombres entiers en Python

En python, les nombres entiers peuvent être de taille arbitraire (ce qui n'est pas le cas dans de nombreux langages de programmation). Les entiers ne sont limités que par la taille de la mémoire disponible pour les stocker.

Le codage binaire

Dans le système binaire, on utilise 2 symboles les chiffres : 0 et 1.

Le système binaire est donc un système de numération de base 2. Ainsi les nombres binaires se décomposent (en décimal) en une somme de facteurs de \(2^n\).

Exemple :

Le nombre binaire \((100111)_2\) correspond (en décimal) à

\((1 × 2^5 + 0 × 2^4 + 0 × 2^3 + 1 × 2^2 + 1 × 2^1 + 1 × 2^0 )_{10}\)

\((1 × 32 + 0 × 16 + 0 × 8 + 1 × 4 + 1 × 2 + 1 × 2)_{10}\)

\(( 32 + 0 + 0 + 4 + 2 + 1 ) 10 = (39)_{10}\)

En partant de la droite :

  • Le 1er bit (de rang 0) correspond aux unités : \(2^0 =1\)

  • Le 2ème bit (de rang 1) correspond aux deuzaines : \(2^1 =2\)

  • Le 3ème bit (de rang 2) correspond aux quatraines : \(2^2 =4\)

  • ............

La position (ou rang) de chaque bit dans le nombre est importante , elle définit le "poids" du bit dans le nombre :

  • Le bit de poids le plus fort correspond à celui dont la puissance de 2 est la plus grande (coté gauche)

  • Le bit de poids le plus faible correspond à celui dont la puissance de 2 est la plus petite (côté droit)

\(2^5\)

\(2^4\)

\(2^3\)

\(2^2\)

\(2^1\)

\(2^0\)

1

0

0

1

1

1

chiffre de poids le plus fort

chiffre de poids le plus faible

RemarqueReprésentation des entiers en Python

Par défaut en Python, les nombres entiers saisis ou affichés sont en base 10 et illimités. Pour manipuler des séquences de bits, de longueur arbitraire, on utilise la notation 0b... où il suffit de remplacer les ... par des 0 et des 1.

Remarque

Les nombres pairs finissent par 0 et les impairs par 1

MéthodeD'une base binaire à décimale

Méthode générale :

\((xyzw)_2 = ( x × 2^3 + y × 2^2 + z × 2^1 + w × 2^0 )_{10} = (....)_{10}\)

ExempleApplications : Convertir le nombre suivant en base décimale

  1. Donner la valeur décimale de \((10100110)_2\)

  2. \((1101 0100 0101 1011)_2\)

  3. combien de nombre entier peut-on coder avec un octet (8 bit)? 2 octets ?

MéthodeCompter sur ces doigts en binaire

Retrouver sur ses mains le comptage en binaire.

Remarque : on utilise la base dix car nous avons 10 doigts ?

MéthodeUn algorithme

Ecrire un algorithme sur papier qui permet à quelqu'un qui exécute vos instructions de déterminer la valeur décimale d'un nombre binaire donné.

MéthodeAutre principe algorithmique

A partir du nombre suivant \((11001100)_2\), on peut retrouver l'écriture décimale en lisant les chiffres de gauche à droite (sens naturel de lecture) .

On part de la valeur 0 et à chaque étape on multiplie le résultat de l'étape précédente par 2 et on ajoute le chiffre lu. On arrête quand on n'a plus de chiffre à lire.

Retrouver l'écriture décimale du nombre ci-dessus en appliquant la méthode.

Explication :

  • \(1 \times 2^0\)

  • \(1 \times 2^1 +1\times 2^0\)

  • \(1 \times 2^2 + 1 \times 2^1 +0 \times 2^0\)

  • \(1 \times 2^3 + 1 \times 2^2 +0 \times 2^1 + 0 \times 2^0\)

  • \(1 \times 2^4 + 1 \times 2^3 +0 \times 2^2 + 0 \times 2^1 + 1\times 2^0\)

  • \(1 \times 2^5+ 1 \times 2^4 +0 \times 2^3 + 0 \times 2^2 + 1\times 2^1+ 1 \times 2^0\)

  • \(1 \times 2^6+ 1 \times 2^5 +0 \times 2^4 + 0 \times 2^3 + 1\times 2^2+ 1 \times 2^1 + 0 \times 2^0\)

  • \(1 \times 2^7+ 1 \times 2^6 +0 \times 2^5 + 0 \times 2^4+ 1\times 2^3+ 1 \times 2^2 + 0 \times 2^1 + 0 \times 2^0\)

Remarque

Ce principe fonctionne aussi pour la base décimale :

2507 :

  • \(2 \times 10^0\)

  • \(2 \times 10^1 +5 \times 10^0\)

  • \(2 \times 10^2 + 5 \times 10^1 + 0 \times 10^0\)

  • \(2 \times 10^3 + 5 \times 10^2 +0 \times 10^1 + 7 \times 10^0\)

Addition et multiplication sur les nombres entiers naturels

Méthode

a

b

a+b

\(a \times b\)

0

0

0

1

1

0

1

1

SimulationPour poursuivre la découverte

Méthode

Effectuer en posant l'opération les calculs suivants en binaire :

101+11 ; 1101+ 11001 ; \(101 \times 11\)

Calculer la somme binaire suivante de deux manières : 1010+1010+1010+1010

Convertir l'écriture d'un nombre décimal en binaire

Exemple

Comment convertir en binaire le nombre 2712892  ?

MéthodeConvertir de décimale à binaire

Convertir \((42)_{10}\) en base deux

On applique la méthode de division par 2 :

\(42=2 \times 21+ 0\)

\(42=2 \times (2 \times 10 +1) + 0\)

\(42=2 \times (2 \times (2 \times 5 +0)+1) + 0\)

\(42=2 \times (2 \times (2 \times (2 \times 2+1)+0) +1) + 0\)

\(42=2 \times (2 \times (2 \times (2 \times (2 \times 1 +0 )+1) +0)+1) + 0\)

\(42=2 \times (2 \times (2 \times (2 \times (2 \times (2 \times 0 +1) +0 )+1) +0)+1) + 0\)

Donc :

\(42 = 1 \times 2^5 + 0 \times 2^4 + 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 0 \times 2^0\)

d'où \((42)_{10} = (101010)_2\)

ExempleApplication

Convertir en base 2 les nombres suivants exprimés dans la base 10 :

a) 24 c) 128 e) 1024

b) 19 d) 789 f) 1245

\((24)_{10}=(11000)_2\) ;

\((19)_{10}=(10011)_2\) ;

\((128)_{10}=(10000000)_2\) ;

\((789)_{10}=(1100010101)_2\) ;

\((1024)_{10}=(10000000000)_2\) ;

\((1245)_{10}=(10011011101)_2\) ;

Le codage Hexadécimal

On utilise 16 signes distincts pour le codage ; Le système hexadécimal est un système de numération de base 16.

L'hexadécimal utilise les 10 chiffres habituels auxquels on ajoute les 6 premières lettres de l'alphabet en majuscules : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A (pour 10) , B (pour 11), C (pour 12), D(pour 13), E (pour 14), F (pour 15).

Ainsi les nombres hexadécimaux se décomposent (en décimal) en une somme de facteurs de \(16^n\)

Exemple :

Le nombre hexadécimal \((FAC)_{16}\) correspond en décimal à :

\(( F×16^2 + A×16^1 + C×16^0 )_{10}\)

\(( 15×256 + 10×16 + 12×1 )_{10}\)

\(( 3840 + 160+ 12)_{10} =(4012)_{10}\)

En partant de la droite :

  • Le 1 er chiffre (de rang 0) correspond aux unités : \(16^0 =1\)

  • Le 2ème chiffre (de rang 1) correspond aux "seizaines" : \(16^1 =16\)

  • Le 3ème chiffre (de rang 2) correspond aux "deux-cent-cinquante-sizaines" : \(16^2 =256\)

  • ............

La position (ou rang) de chaque chiffre dans le nombre est importante , elle définit le "poids" du chiffre dans le nombre :

  • Le chiffre (lettre) de poids le plus fort correspond à celui dont la puissance de 16 est la plus grande (gauche)

  • Le chiffre (lettre) de poids le plus faible correspond à celui dont la puissance de 16 est la plus petite (droite)

    \(16^5\)

    \(16^4\)

    \(16^3\)

    \(16^2\)

    \(16^1\)

    \(16^0\)

    8

    2

    D

    A

    B

    7

    bit de poids le plus fort

    bit de poids le plus faible

Rappel

Décimal

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Binaire

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

Hexadécimal

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

MéthodeD'une base hexadécimale à décimale

\((xyzw)_{16} = ( x × 16^3 + y × 16^2 + z × 16^1 + w × 16^0 )_{10} = (....)_{10}\)

Convertir l'écriture d'un nombre d'une base à l'autre.

RemarqueEn Python

De la même manière on peut manipuler des nombres hexadécimaux à l'aide de la notation 0x...où...désigne n'importe quelle séquence de chiffre en base 16.

ExempleExercice d'application

Convertir en base dix les nombres suivants exprimés dans différentes bases :

a) \((14)_{16}\) ; b) \((ABC)_{16}\) ; c) \((35ED12F )_{16}\)

Vérifier les réponses avec Python en utilisant la notation 0x14 pour le nombre hexadécimal.

réponses : a) 20 b)2748 c)56545583

MéthodeConvertir de décimal en hexadécimal

Méthode par division : on effectue une succession de divisions par 16, comme pour le binaire, puis on range l 'ensemble des

restes : ( celui de la première division étant celui de poids le plus faible ) pour constituer le code dans la nouvelle base .

Exemple, convertir 194 en base 16 :

Résultat :

\(194=16 \times 12 +2\) soit \(12 \times 16^1 + 2 \times 16^0\)

donc,

12 et 2 soit \((C2)_{16}\)

ExempleApplication

Convertir en base 16 les nombres suivants exprimés dans la base 10 :

a) 24 c) 128 e) 1024

b) 19 d) 789 f) 1245

\((24)_{10}=(18)_{16}\) 

\((19)_{10}=(13)_{16}\) 

\((128)_{10}=(80)_{16}\) 

\((789)_{10}=(315)_{16}\) 

\((1024)_{10}=(400)_{16}\) 

\((1245)_{10}=(4dd)_{16}\) 

RemarqueConvertir en hexadécimal en passant par l'écriture binaire

On commence par coder le nombre en binaire , puis on regroupe à partir de la droite par tranche de quatre bits puis on code chaque regroupement dans la base hexadécimale.

MéthodeConvertir de binaire à hexadécimal

Il faut décomposer le nombre binaire en quartets (donc des blocs de 4 bits consécutifs 4 par 4).

Pour l'octet \((01111101)_2\) on le sépare 2 quartets : 0111 – 1101. Chaque quartet binaire représente un nombre décimal : 7 – 13 ce qui donne \((7D)_{16 }\).

MéthodeConvertir un hexadécimal en binaire

Convertir \((82DAB7)_{16}\) . on prend chaque chiffre de l'écriture hexadécimale et on l'écrit en base deux.

Soit 8-2-13-10-11-7 c'est à dire 1000-0010-1101-1010-1011-0111 donc en binaire \((1000 0010 1101 1010 1011 0111)_2\)

ExempleApplication : Reprendre l'exemple précédent

\((24)_{10}=(11000)_2\) ; \((24)_{10}=(18)_{16}\) 

\((19)_{10}=(10011)_2\) ; \((19)_{10}=(13)_{16}\) 

\((128)_{10}=(10000000)_2\) ; \((128)_{10}=(80)_{16}\) 

\((789)_{10}=(1100010101)_2\) ; \((789)_{10}=(315)_{16}\) 

\((1024)_{10}=(10000000000)_2\) ; \((1024)_{10}=(400)_{16}\) 

\((1245)_{10}=(10011011101)_2\) ; \((1245)_{10}=(4dd)_{16}\) 

ExempleLe codage des images

On reconstitue les couleurs en informatique à partir du rouge, du vert et du bleu. Sachant que chaque couleur est codée par un octet, combien de couleurs peut-on ainsi reconstituer?

Remarque: le blanc est codé par: FF FF FF; le noir est codé par 00 00 00. (chaque groupe de deux chiffres code une couleur, dans l'ordre: rouge, vert, bleu).

La couleur vert d'eau sur le moniteur est codée en hexadécimal \((82DAB7)_{16}\) .