Studiul sistemelor de numerație și al reprezentării datelor numerice și nenumerice în memoria calculatorului.
Un sistem de numerație pozițional scrie numerele folosind cifre a căror valoare depinde de poziția lor. Sistemul obișnuit are baza 10 (cifre 0–9): 273 înseamnă 2·100 + 7·10 + 3·1 — fiecare poziție valorează o putere a bazei.
Calculatorul lucrează în baza 2 (binar), cu doar două cifre, 0 și 1 — pentru că circuitele disting sigur două stări electrice. Numărul binar 1011 înseamnă 1·8 + 0·4 + 1·2 + 1·1 = 11 în zecimal.
Pe lângă ele se folosesc baza 8 (octal), cu cifrele 0–7, și mai ales baza 16 (hexazecimal), cu cifrele 0–9 și literele A–F, unde A = 10, B = 11, ..., F = 15. Hexazecimalul e comod ca stenografie a binarului: fiecare cifră hexa corespunde exact la 4 biți, deci un octet se scrie cu fix două cifre hexa (de la 00 la FF). Codurile de culoare din paginile web (de exemplu FF0000 pentru roșu) sunt exact astfel de perechi de cifre hexa.
Regula generală de citire a unui număr scris în baza b: cifrele, de la dreapta la stânga, se înmulțesc cu puterile crescătoare ale lui b (b la puterea 0, 1, 2, ...) și se adună. O verificare rapidă de bun-simț: într-o bază b pot apărea doar cifre strict mai mici decât b — scrierea 182 nu poate fi un număr în baza 8, pentru că cifra 8 nu există acolo.
Din baza b în baza 10: înmulțești cifrele cu puterile bazei și aduni. Exemplu: 1101 din baza 2 = 1·8 + 1·4 + 0·2 + 1·1 = 13; 2F din baza 16 = 2·16 + 15 = 47.
Din baza 10 în baza b: împărțiri repetate la b, reținând resturile; numărul în baza b este șirul resturilor citit de la ultimul către primul. Exemplu, 25 în binar: 25:2 = 12 rest 1; 12:2 = 6 rest 0; 6:2 = 3 rest 0; 3:2 = 1 rest 1; 1:2 = 0 rest 1 → citit invers: 11001. Greșeala tipică este citirea resturilor în ordinea obținerii (10011) — verifică mereu prin conversia inversă: 11001 = 16 + 8 + 1 = 25, corect.
Între binar și hexazecimal conversia e directă, fără trecere prin baza 10: grupezi biții câte 4, de la dreapta, și înlocuiești fiecare grup cu cifra hexa corespunzătoare. 10111110 → 1011 | 1110 → B | E → BE. Invers, fiecare cifră hexa se desface în 4 biți. Aceeași idee leagă binarul de octal, cu grupe de 3 biți.
Merită memorate reprezentările binare ale numerelor 0–15 (0000 – 1111) și puterile lui 2 până la 1024 — cu ele, majoritatea conversiilor de examen se fac din priviri, fără calcule lungi.
Adunarea binară folosește doar patru reguli: 0+0 = 0; 0+1 = 1; 1+0 = 1; și regula-cheie 1+1 = 10 — adică cifra 0 și transport (carry) 1 către poziția următoare. Iar 1+1+1 (cu transport) = 11: cifra 1 și transport 1.
Exemplu complet, 1011 + 110 (adică 11 + 6):
Rezultat: 10001 = 17 în zecimal — verificarea în baza 10 (11 + 6 = 17) confirmă calculul, obicei care previne majoritatea greșelilor.
Două trucuri cu valoare de examen:
Aceste proprietăți leagă direct reprezentarea binară de algoritmii cu cifre și puteri ale lui 2 din subiectele de bacalaureat.
Memoria alocă fiecărei valori un număr fix de biți, iar de aici decurg limitele tipurilor de date.
Întregii fără semn pe n biți acoperă intervalul de la 0 la 2 la puterea n minus 1: pe 8 biți, 0–255; pe 16 biți, 0–65535; pe 32 de biți, 0–4.294.967.295.
Întregii cu semn sacrifică un bit pentru semn și folosesc reprezentarea prin complement față de 2; pe n biți acoperă de la -2 la puterea n-1 până la 2 la puterea n-1 minus 1: pe 8 biți, de la -128 la 127; pe 32 de biți, aproximativ ±2,1 miliarde — limita tipului int din C++, de care se lovesc programele care calculează factoriale sau sume mari. Depășirea acestei limite (overflow) nu dă eroare la rulare: rezultatul se strâmbă pur și simplu, deseori devenind negativ — o sursă clasică de rezultate aberante.
Numerele reale se memorează în virgulă mobilă (standard IEEE 754): un semn, o mantisă și un exponent — în esență, notația științifică în baza 2. Consecința practică importantă: majoritatea zecimalelor nu se reprezintă exact (0.1 în binar este o fracție periodică infinită), deci calculele cu reali produc mici erori de rotunjire. De aceea compararea a două valori reale cu == este nesigură: corect se compară dacă diferența lor, în modul, e mai mică decât o toleranță aleasă (de exemplu 0.000001).
Caracterele se reprezintă prin coduri numerice. Codul ASCII folosește 7 biți (extins la un octet) pentru 128 de caractere: litere mari și mici englezești, cifre, semne de punctuație, caractere de control. Detaliile utile la probleme: literele mari A–Z ocupă coduri consecutive (A = 65, B = 66, ...), la fel literele mici (a = 97), iar diferența dintre o literă mică și perechea ei mare este constantă, 32 — pe această proprietate se bazează algoritmii de transformare majuscule/minuscule. Cifrele ca simboluri au codurile 48–57: caracterul cifră se transformă în valoarea numerică scăzând codul lui 0.
Pentru celelalte alfabete și simboluri ale lumii — diacritice românești incluse — există Unicode, care atribuie fiecărui caracter un cod unic, memorat de regulă în codificarea UTF-8, compatibilă cu ASCII pe primele 128 de coduri.
Imaginile raster sunt grile de pixeli; fiecare pixel color ține de obicei trei componente RGB a câte un octet (16,7 milioane de culori posibile). O imagine de 1920×1080 necomprimată ocupă circa 6 MB — de aceea există formate comprimate (JPEG, PNG).
Sunetul devine numere prin eșantionare: amplitudinea semnalului se măsoară de mii de ori pe secundă (44.100 de eșantioane/s la calitate CD), iar fiecare măsurătoare se memorează pe un număr fix de biți. Concluzia întregului capitol: orice informație — text, imagine, sunet — se reduce în memorie la șiruri de biți; doar interpretarea lor diferă.