Tutoriel 2 - Les bases décimale, binaire et hexadécimale

Pour discuter de l'assembleur
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Tutoriel 2 - Les bases décimale, binaire et hexadécimale

Message par Anonyme2 »

Code : Tout sélectionner

Tutorial 2 - Les bases décimale, binaire et hexadécimale
--------------------------------------------------------
- Terminé le 17 octobre 2004 -
-------------------------------

On ne peut pas aborder l'assembleur sans avoir compris un minimum la représentation des nombres décimaux en binaire et hexadécimale.


|------------------------------|
| La base décimale ou base 10: |
|------------------------------|

C'est la base que nous utilisons tous les jours. Elle comporte 10 chiffres :

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Tout nombre quelle que soit sa base peut se représenter sous la forme d'une expression de puissance de sa base.

En rappel, Tout nombre élevé à la puissance 0 est égal à 1

J'utilise le symbole ^ pour indiquer qu'il s'agit d'une puissance.


2^0 = 1

10^0 = 1

etc.

et voici un rappel de quelques puissances de 10
-----------------------------------------------

10^0 = 1
10^1 = 10 
10^2 = 10 x 10 = 100
10^3 = 10 x 10 x 10 = 1000
10^4 = 10 x 10 x 10 x 10 = 10000
10^5 = 10 x 10 x 10 x 10 x 10 = 100000

Si l'exposant vaut 5, on retrouve 5 fois  le 10 dans l'expression (10^5 = 10 x 10 x 10 x 10 x 10) et cinq 0 sui suivent le 1 (100000)

On peut décomposer un nombre en base 10 comme ceci
L'unité multiplira 10^0, la dizaine multipliera 10^1, la centaine multipliera 10^2 etc.
Cette façon de faire est valable pour la base 2 et 16 sauf pour la puissance qui sera respectivement une puissance de 2 et de 16.

par exemple le nombre 459 :



          centaine | dizaine  | unité
             4     |     5    |    9
         (4x10^2)  + (5x10^1) + (9x10^0)
         (4 x 100) + (5 x 10) + (9 x 1)
            400    +    50    +    9
            
                      459



|----------------------------|
| La base binaire ou base 2: |
|----------------------------|

C'est en électricité et précisément en électronique (logique ou numérique) la base qui représente le mieux l'état électrique.

Un nombre binaire (= en base deux) est un nombre dont chaque chiffre ne peut valoir que 0 ou 1 (par conséquent elle ne comporte que 2 chiffres)

0, 1

qui peuvent indiquer que le courant passe ou ne passe pas (2 états : en électronique analogique, les variations des signaux ne sont pas représentées de la même manière).

En rappel, Tout nombre élevé à la puissance 0 est égal à 1 donc

2^0 = 1

et voici un rappel de quelques puissances de 2
----------------------------------------------

2^0 = 1
2^1 = 2 
2^2 = 4  = 2 x 2
2^3 = 8  = 2 x 2 x 2
2^4 = 16 = 2 x 2 x 2 x 2
2^5 = 32 = 2 x 2 x 2 x 2 x 2

Si l'exposant vaut 5, on retrouve 5 fois  le 2 dans l'expression (2^5 = 2 x 2 x 2 x 2 x 2)

Le nombre décimal 459 sera représenté en binaire par 

          1 1100 1011
          
Chaque 0 ou chaque 1 qui constituent le nombre binaire est appelé bit (et non pas byte)
          
Le chiffre le plus à droite a le rang 0 (2^0), celui après en allant vers la gauche le rang 1 (2^1) etc. en suivant


Chaque bit à 1 multipliera la puissance par 1 et chaque bit à 0 par 0, ensuite on additionne.
Pour 459 en décimal , on a la décomposition en base 2 suivante :

   459 =  1 1100 1011

  1 x 2^8  |  1 x 2^7  |  1 x 2^6 |  0 x 2^5 |  0 x 2^4 |  1 x 2^3 | 0 x 2^2 | 1 x 2^1 |  1 x 2^0
 (1 x 256) + (1 x 128) + (1 x 64) + (0 x 32) + (0 x 16) +  (1 x 8) + (0 x 4) + (1 x 2) + (1 x 1)
     
     256   +     128   +     64   +     0    +     0    +     8    +     0   +    2    +    1


A noter que  1 1100 1011 =  0001 1100 1011
Les 0 à gauches sont des 0 non significatifs mais permettent parfois une meilleure lecture.


Voici un nombre de 32 bit en binaire (=long en PureBasic et = Dword en assembleur)

    
     10001110010110100001110011111010
   b31                              b0

Le bit le plus à droite est le bit b0 et le bit le plus à gauche (le 32 ième) est le bit b31

b0 est appelé LSB en anglais pour Least significant bit soit bit le moins significatif
b0 est également appelé bit de poids faible

b31 est appelé MSB en anglais pour Most significant bit soit bit le plus significatif
b31 est également appelé bit de poids fort

Si le nombre est un word (16 bits) c'est b15 qui est le bit de poids fort et etc en fonction de la taille des nombres.



|----------------------------------|
| La base hexadécimale ou base 16: |
|----------------------------------| 

La représentation en binaire est lourde car les nombres deviennent vite très longs.
La base 10 ne permet pas une bonne représentation (10 n'est pas une puissance de 2).

La solution de représentation est la base 16 car elle comporte 16 éléments (10 pour la base décimale et 2 pour le binaire).
16 est une puissance de 2 ce qui est un avantage.

Les 16 éléments (ou "chiffres") qui la composent sont les suivants :

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

A vaut 10 en décimal, B = 11 etc. jusqu'à F = 15

La décomposition en base 16 est identique à celle de la base 2 ou 10 sauf que c'est 16 qui est élevé à la puissance.

16^0, 16^1 etc.

et voici un rappel de quelques puissances de 16
----------------------------------------------

16^0 = 1 = 2^0
16^1 = 16 = 2^4
16^2 = 16 x 16 = 256 = 2^8
16^3 = 16 x 16 x 16 = 4096 = 2^12
16^4 = 16 x 16 x 16 x 16 = 65536 = 2^16

On va reprendre le nombre 459

Voici sa représentation en hexadécimale :

             1CB
             
Pour 459 en base 16 on a la décomposition suivante pour arriver en décimal

                     1     |      C     |     B 
                 1 x 16^2  |  C x 16^1  |  B x 16^0
                 (1 x 256) |   12 x 16  |  11 x 1
                     256   +     192    +    11

 

La représentation  en binaire de chacun des 10 éléments de la base 16 tient sur 4 bits 

Voici la représentation des 10 éléments hexa en binaire


 
0  --> 0000
1  --> 0001
2  --> 0010
3  --> 0011
4  --> 0100
5  --> 0101
6  --> 0110
7  --> 0111
8  --> 1000
9  --> 1001
A  --> 1010
B  --> 1011
C  --> 1100
D  --> 1101
E  --> 1110
F  --> 1111


On peut donc facilement découper un nombre hexa en sa représentation binaire (base 16 multiple de la base 2).

Toujours avec 459 (décimal)  --> 1CB en hexa


                     1     |      C     |    B 
                   0001    |    1100    |   1011 
                   

  ce qui donne  459 (décimal) -->    000111001011
  
  
  4 bits sont appelés un quartet
  8 bits sont appelés un octet (ou byte en anglais)
  
  pour un quartet on a 2^4 possibilités (16 en tout)
  pour un octet   on a 2^8 possibilités (256 en tout)

Pour info, lorsque l'on ajoute à 9 (hexa) le nombre 1 (hexa), le résultat est A et non 10.
Si on ajoute 1 au nombre F, le résultat est 10. La retenue ne s'ajoute pas au passage par 10 mais par 16.

La doc Purebasic dispose d'une table de conversion des 3 bases.
Voir dans Manuel, rubrique Thèmes divers, Table numérique

Voilà pour le deuxième tut.


Prochain tut : Changement de base (rapidement car il existe les calculatrices) et la représentation des nombres entiers signés et non signés.


A+
Denis
Dernière modification par Anonyme2 le jeu. 04/nov./2004 17:30, modifié 2 fois.