Concepts fondamentaux de la mémoire et de la représentation des données

Constantes et variables entières

Une constante est une entité dont la valeur reste immuable tout au long de l'exécution du programme (par exemple, une valeur numérique fixe). À l'inverse, une variable représente un espace de stockage dont le contenu peut évoluer. Elle se définit par trois caractéristiques : un identifiant (nom), un type de données et une valeur. En C, une variable doit être déclarée avant utilisation :

int compteur = 42;

Mémoire vive (RAM) et mémoire morte (ROM)

RAM (Random Access Memory) : Il s'agit d'une mémoire volatile. Les données sont perdues lorsque l'alimentation est coupée. Elle offre des vitesses de lecture et d'écriture très élevées et sert de zone de travail temporaire pour le processeur.

ROM (Read-Only Memory) : C'est une mémoire non volatile qui conserve les informations même sans alimentation. Les données y sont généralement inscrites lors de la fabrication. Elle est utilisée pour stocker des instructions critiques et permanentes, comme le BIOS ou les firmwares des systèmes embarqués.

Bits et octets

Le bit (binary digit) est l'unité d'information la plus élémentaire, ne pouvant prendre que deux valeurs : 0 ou 1. L'octet (byte) est l'unité de stockage de base, composée de 8 bits.

Les multiples standards suivent une base binaire :

  • 1 Kilo-octet (Ko) = 1024 octets
  • 1 Méga-octet (Mo) = 1024 Ko
  • 1 Giga-octet (Go) = 1024 Mo
  • 1 Téra-octet (To) = 1024 Go

Règles de nommage des identifiants

Un identifiant sert à nommer les variables, fonctions, classes et autres entités. Sa syntaxe obéit à des règles strictes :

  • Il ne peut contenir que des lettres (a-z, A-Z), des chiffres (0-9) et des underscores (_).
  • Il ne doit jamais commencer par un chiffre.
  • La casse est significative (majuscules et minuscules sont distinctes).
  • L'utilisation de mots-clés réservés du langage (comme int, return) est interdite.

Techniques de commentaire de code

Les commentaires sont ignorés par le compilateur et servent à documenter le code.

Commentaire sur une seule ligne : débute par // et s'étend jusqu'à la fin de la ligne.

// Initialisation de la variable de configuration

Commentaire multiligne : encadré par /* et */.

/* 
   Ce bloc explique la logique 
   de traitement des données 
*/

Commentaire conditionnel (désactivation de bloc) : utilise les directives du préprocesseur pour exclure du code de la compilation.

#if 0
    int ancienneValeur = 100;
    printf("%d", ancienneValeur);
#endif

Conversions entre systèmes de numération

Les bases couramment utilisées en informatique sont identifiées par des préfixes spécifiques :

  • Décimal : aucun préfixe (ex: 123).
  • Octal : préfixe 0 (ex: 0123).
  • Hexadécimal : préfixe 0x (ex: 0x1A).

Méthodes de conversion :

  • Décimal vers une autre base : divisions successives par la base cible, les restes lus en ordre inverse forment le résultat.
  • Autre base vers décimal : somme pondérée des chiffres multipliés par la base élevée à la puissance de leur position.
  • Binaire et Hexadécimal : 1 chiffre hexadécimal équivaut exactement à 4 bits (ex: 0xA = 1010).
  • Binaire et Octal : 1 chiffre octal équivaut exactement à 3 bits (ex: 07 = 111).

Boutisme et représentation des entiers

Petit-boutiste (Little-endian) : l'octet de poids faible d'une donnée multioctet est stocké à l'adresse mémoire la plus basse.

Exemple pour la valeur hexadécimale 0xABCDEF00 :

Adresse basse vers adresse haute : 00 EF CD AB.

Codage des entiers relatifs :

  • Bit de signe : le bit de poids fort indique le signe (0 pour positif, 1 pour négatif).
  • Code signé (Valeur absolue et signe) : le bit de signe suivi de la valeur binaire. Pour 0x4A (74) : 00000000 00000000 00000000 01001010.
  • Complément à 1 : inversion de tous les bits de la valeur absolue. Pour -0x4A : 11111111 11111111 11111111 10110101.
  • Complément à 2 : complément à 1 + 1. C'est le format réellement utilisé par le processeur. Pour -0x4A : 11111111 11111111 11111111 10110110 (soit 0xFFFFFFB6).

Représentation des nombres à virgule flottante (IEEE 754)

Le format simple précision (float) utilise 32 bits répartis ainsi : 1 bit de signe, 8 bits d'exposant décalé, et 23 bits de mantisse.

Analyse de la valeur -5.5 :

  • Signe : 1 (négatif).
  • Binaire : 101.1. En notation scientifique : 1.011 × 2^2.
  • Exposant : 2 + 127 (biais) = 129, soit 10000001 en binaire.
  • Mantisse : on omet le "1" implicite, il reste 011, complété par des zéros jusqu'à 23 bits.
  • Stockage final : 1 10000001 01100000000000000000000, ce qui donne 0xC0B00000 en hexadécimal.

Analyse de la valeur -20.25 :

  • Signe : 1.
  • Binaire : 10100.011.010001 × 2^4.
  • Exposant : 4 + 127 = 131, soit 10000011.
  • Stockage final : 1 10000011 01000100000000000000000, correspondant à 0xC1A20000.

Types de données caractères

Les types caractères occupent exactement 1 octet (8 bits) en mémoire.

  • signed char : interprété avec un bit de signe, permettant de représenter des valeurs de -128 à 127.
  • unsigned char : tous les bits sont utilisés pour la magnitude, offrant une plage de 0 à 255. Ce type est très fréquemment employé pour manipuler des données brutes ou des codes ASCII étendus.

La correspondance entre ces valeurs numériques et les symboles textuels est régie par la table standard ASCII.

Étiquettes: computer-memory data-representation computer-architecture IEEE-754 number-systems

Publié le 7 juillet à 17h37