Beruflich Dokumente
Kultur Dokumente
Ce cours purement théorique explique la manipulation de nombres exprimés dans différents systèmes de
numération.
Vous apprendrez à effectuer des décompositions, des conversions et des opérations dans chaque base.
Le décimal
- n représente le nombre.
- b représente la base de numération utilisée.
Le nombre 256 peut donc se noter 25610 ou 256d, bien qu'en général, la base décimale est
sous-entendue.
Le binaire
Un ordinateur est un assemblage de composants électroniques. Ils sont les supports de plusieurs millions
de transistors, qui, en fonction de la tension électrique à laquelle ils sont soumis, peuvent prendre l'état
logique "1" ou "0".
Un nombre binaire peut se noter n2 ou se suffixer de "b" et ne peut être constitué que de 1 et de 0, par
exemple 10112 (ou 1011b) est un nombre binaire.
Comme vous l'aurez sans doute compris, nous utiliserons des puissances de 2 à l'instar des puissances de
10 du décimal.
On représente les nombres binaires sous plusieurs formes (un bit est un chiffre en binaire) :
Le bit le plus à gauche est le bit de poids fort, et le bit le plus à droite est le bit de poids faible.
L'octal
L'hexadécimal
La décomposition d'un nombre se fait en fonction de la base utilisée, des chiffres et de leurs rang.
Décompositions en décimal
On multiplie chaque chiffre par le nombre correspondant à la base élevé à la puissance correspondant
au rang de ce chiffre.
Décompositions en binaire
Notez que la valeur du rang d'un bit ne peut être multipliée que par 1 ou 0. Autrement dit, le rang est
additionné ou non selon la valeur bit. La décomposition précédente est donc équivalente à :
1101b = 23 + 22 + 20
22 21 20 2-1 2-2
1 0 1 0 1
Et la décomposition rapide :
101.01b = 22 + 20 + 2-2
N'oubliez pas que A et F sont bien des "chiffres" dans le système hexadécimal. En l'occurence, leurs
équivalents décimaux sont respectivement 10 et 15.
5AF = 500 + A0 + F
Et en décimal :
Décomposition décimale :
Notez que jusqu'à présent nous n'avons fait les décompositions qu'en décimal. Mais une décomposition
peut très bien se faire dans la base propre au nombre à décomposer ! Ou même dans une autre...
Plus concrètement, au lieu d'écrire 2 pour la base binaire, nous pouvons écrire 10b car 10b correspond à
2 en décimal. Idem pour les puissances (les rangs) qui s'écriront dans la base choisie.
http://www.micromany.net/location_id=doc-0-0 24/12/2004 Page 4 sur 11
La décomposition qui suit ne comporte QUE des nombres binaires :
De même, les décompositions peuvent se faire en hexadécimal. Sachant que le nombre 10h correspond à
16 en décimal, la décomposition suivante ne comporte QUE des nombres hexadécimaux :
Décompositions mixtes
Nos premières décompositions étaient mixtes, car nous mélangions du binaire et du décimal. Pourquoi ne
pas mélanger de l'hexadécimal avec du binaire ? Il suffit de convertir tous les nombres en la base voulue
(une simple calculatrice suffit pour l'instant).
Nous décidons de décomposer le nombres hexadécimal 5AF en nombres binaires. Pour cela, quelques
conversions s'imposent :
5h = 101b
Ah = 1010b
Fh = 1111b
10h = 10000b (16d)
La décomposition en binaire :
Durant ce cours, notre progression nous permettra de nous passer de la calculatrice pour de plus en plus
de calculs. Nous allons donc apprendre les conversions manuelles au chapitre suivant.
Comme vous l'avez sans doute remarqué précédemment, la valeur décimale de n'importe quel nombre est
la somme des produits (chiffre * baserang), le tout exprimé en décimal.
101.01b = 22 + 20 + 2-2
101.01b = 4 + 1 + 0.25
101.01b = 5.25d
Depuis le décimal
Première méthode
70 / 2 = 35 reste 0
35 / 2 = 17 reste 1
17 / 2 = 8 reste 1
8 / 2 = 4 reste 0
4 / 2 = 2 reste 0
2 / 2 = 1 reste 0
1 / 2 = 0 reste 1
395 / 16 = 24 reste 11
24 / 16 = 1 reste 8
1 / 16 = 0 reste 1
Seconde méthode
Ici la procédure est plus simple car la plus grande valeur que peut prendre un bit est 1... Les deux seuls
bits à 1 du nombre binaire seront aux rangs 9 et 3 : 1000001000
Sachant que Fh = 1111b, il est simple de convertir chaque quartet du nombre binaire en un chiffre
hexadécimal. Il suffit après de réassembler les chiffres pour obtenir le nombre converti.
C'est l'inverse, on isole les chiffres du nombre hexadécimal et on les converti en binaire. Il suffit ensuite
de juxtaposer les quartets.
hex: B 8
bin: 1011 1000
0+0=0
0+1=1
1+1=10 et non 2! Il y a simplement eu une retenue:
1
1
+ 1
-------
1 0
1 11
100001
+ 11001011
+ 10000001
-------------
101101101
1+1+1 = 1 retenue 1
1+0+1+0 = 0 retenue 1
1+0+0+0 = 1
0+1+0 = 1
0+0+0 = 0
1+0+0 = 1
1+0 = 1
1+1 = 0 retenue 1
1 = 1
Soustraction
On peut soustraire deux nombres binaires comme dans toutes les bases, avec la méthode apprise au
primaire. Mais le concept de soustraction introduit une nouvelle notion, celle des nombres relatifs. En
algèbre, on ajoute un signe -, mais en informatique, seuls des 0 et des 1 existent! Il faut donc adopter
une convention, celle des nombres signés: un nombre signé dont le bit de poids fort est 1 est un nombre
négatif.
Par exemple l'octet 10101010 est un nombre négatif. Sa valeur absolue est 0101010. Mais attention, son
opposé n'est pas 00101010! Pour obtenir l'opposé d'un nombre binaire signé, il faut lui appliquer le
complément à deux: inverser tous les bits du nombre, et additionner 1.
10101010
inversion: 01010101 (complément à 1)
incrémentation: 01010110 (complément à 2)
L'opposé de 10101010 est donc 01010110. Vous remarquerez qu'on ne peut pas convertir ces nombres
directement vers d'autres bases, car il s'agit de notations conventionnelles.
On veut soustraire les deux octets signés 00000101 (5d) et 00000011 (3d).
Le complément à 2 de 00000011 est 11111100+1 soit 11111101.
1111 1
http://www.micromany.net/location_id=doc-0-0 24/12/2004 Page 8 sur 11
00000101
+ 11111101
----------
00000010
On obtient bien 00000010 (2d). Vous remarqurez que la dernière retenue (celle de la dernire addition) a
été ignorée car elle nous ferait dépasser les 8 nombres que peuvent contenir un octet...
Multiplication
0*0=0
0*1=0
1*1=1
101
* 110
-------
000
101
+ 101
-------
11110
Dans le cas des multiplications par 10b, 100b, 1000b (10nb) on procède comme dans les autres bases: on
décale la virgule vers la droite. En binaire, on parle de décalage de bits vers la gauche:
10*10=100
10*100=1000
10*1000=10000
Dans la plupart des langages de programmation, l'opération a<<b sert à décaler chaque bit du nombre a de
b rangs vers la gauche (multiplie par 2 à chaque décalage).
Division
111 | 11
- 11 |----
----- | 10
01 |
- 0 |
-----|
1 |
111/11 = 10 reste 1.
Pour diviser par 10nb, on peut décaler la virgule vers la gauche (ou les bits vers la droite):
1000/10=100
1000/100=10
1000/1000=1
A l'instar de l'opérateur >>, l'opération a>>b sert à décaler chaque bit du nombre a de b rangs vers la
droite (divise par 2 à chaque décalage).
A l'instar des 4 opérateur arithmétiques + - * / on dispose de 4 opérateurs logiques qui fonctionnent à peu
près de la même façon mais qui ne sont utilisés qu'en binaire.
Un opérateur binaire requiert deux bits en entrée, alors qu'un opérateur unaire n'en demande qu'un.
Fontionnement
Les programmeurs savent que ces opérateurs logiques sont souvent utilisés pour comparer des données
variables, et continuer en fonction du résultat. Nous allons étudier la sortie de ces opérateurs en fonction
de(s) entrée(s).
Tables de vérité
Une table de vérité pour une opération logique donnée consiste en un tableau contenant le(s) entrée(s) et
la sortie.
De longues opérations
Le fait de placer NOT devant une autre opération logique inverse le bit de sortie.
NOT AND 0 0 = 1
NOT AND 0 1 = 1
NOT AND 1 1 = 0
NOT OR 0 0 = 1
NOT OR 1 0 = 0
NOT OR 1 1 = 0
NOT XOR 0 0 = 1
http://www.micromany.net/location_id=doc-0-0 24/12/2004 Page 10 sur 11
NOT XOR 0 1 = 0
NOT XOR 1 0 = 1
A vous de traduire ces opérations logiques pour obtenir des instructions conditionnelles!
Copyright © 2004 Patrice Blanchardie. Permission est donnée de distribuer, copier, modifier des copies de ce document provenant de
www.micromany.net sous les termes de la GNU FDL.