Numération

De Wiki sur la programmation
Révision datée du 31 août 2022 à 16:58 par Guillaume (discussion | contributions) (Comment les ordinateurs gèrent les nombres)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Les système de numération

Le binaire

Le processeur en lui-même ne gère que des bits. On dit qu'il utilise le système binaire. On résume souvent au zéro (0) et au un (1) pour distinguer les deux états. Ceci est bien pratique pour réaliser des calculs. Toutefois on parlerait plutôt d'état actif et d'état repos. On associe le 1 à l'état actif et le 0 à l'état repos.

Par exemple :

  • La porte serait ouverte ou fermée
  • La lumière serait allumée ou éteinte
  • Le niveau de l'eau serait haut ou bas
  • etc.

Une algèbre existe pour manipuler et combiner ces valeurs. Il s'agit de l'algèbre de Boole.

A là base il existe trois opérateurs: le ET, le OU et le NON. D'autres opérateurs existent mais en réalité ils peuvent être construit à partir des 3 précédents: XOU ou OU exclusif, NAND ou NOT AND, IMP ou implication.

Le ET logique

La sortie du ET est vraie si et seulement si les 2 entrées sont vraies.

Il est souvent noté par le point.

Le OU logique

La sortie du OU est vraie si et seulement si l'une des 2 entrées au moins est vraie.

Il est souvent noté par le signe plus (+).

Le NON logique =

La sortie du NON est toujours l'opposé de l'entrée.

Il est représenté par une barre horizontale au-dessus de l'expression.

Les entiers

Une succession de 0 et de 1 c'est bien joli, mais ce n'est pas trop parlant pour un humain qui à l'habitude de manipuler les nombres en base décimale.

Pour stocker des nombre entiers nous utilisons des regroupements de bits: - le tercet: permet de représenter des chiffres de 0 à 7 en base octale (base 8). - le quartet: permet de représenté un chiffre hexadécimal de 0 à F (0 à 15 en décimal). - le septet: représente des nombres de 0 à 127. - l'octet: représente des nombres de 0 à 255. C'est souvent une unité de base utilisée avec des multiples. Il est exactement écrit avec deux chiffres hexadécimaux.

Les entiers de taille plus grandes sont représenté dans des suites d'octets: - l'entier court (short, shortint, int16): 2 octets. De 0 à 65535. - l'entier: (int, integer, int32): 4 octets. De 0 à 2^32-1. - l'entier long (long, int64): 8 octets. De 0 à 2^64-1. - l'entier long long, ou entier géant (bigint, int128): 16 octets. De 0 à 2^128-1.

Selon les processeurs les bits sont disposés en mémoire en partant du bit le plus significatif ou bien du moins significatif. Nous parlerons ainsi de MSB pour "most significant bit" et LSB pour "less significant bit".

Le mot: il est possible que vous rencontrerez ce terme dans de la documentation informatique. Il s'agit ici du mot machine. Il s'agit du nombre le plus grand qu'un processeur soit capable de manipuler à chaque instruction élémentaire. Ainsi un processeur de 32 bits est capable de manipuler des nombres entiers de 32 bits.

Les entiers négatifs

Jusqu'ici nous n'avons parlé que des entiers positifs. Or les unités arithmétiques des processeurs sont capables de manipuler des entiers négatifs. Comment fait-on pour les représenter ? Et bien nous utilisons le bit le plus significatif pour indiquer qu'un nombre est négatif (1) ou positif (0).

Mais comment fait-on pour différencier les entiers avec ou sans signes ? Dans l'absolu on ne sait pas faire la différence. Seul les programmes savent comment convertir ces nombres pour l'afficher correctement.

L'hexadécimal

On peut parler aussi de la base 16. Les chiffres sont : 0 à 9, puis a, b, c, d, e et f. Les lettres peuvent être en minuscule ou en majuscule. Cela n'a pas d'importance. Cette base est très souvent employée. Elle a l'avantage d'être compacte, explicite et fixe. Un octet sera toujours représenté par 2 chiffres hexa.

Pour convertir de l'hexa vers le décimal: pour chaque chiffre on multiplie le nombre en décimal par une puissance de 16 en fonction de sa position. Exemples (le plus significatif est à gauche): - 8a: 10 + 16 * 8 = 138 - af: 15 + 16 * 10 = 175 - 3fea: 10 + 14 * 16 + 15 * 16 * 16 + 3 * 16 * 16 * 16 = 16362