Fondamenti di informatica
In questo breve tutorial spiegherò alcune cose riguardo al data storing, ossia a come i dati vengono immagazzinati in memoria, scendendo a livello più basso di come un normale utente è abituato. Parlerò di basi numeriche, di suddivisione in bit, di endianness e di altri interessanti ammenicoli informatici.
Codifica binaria ed esadecimale
Le basi numeriche più usate nel campo del data storing sono la binaria e l'esadecimale. La prima perchè permette di scendere
a livello della macchina e di ispezionare a fondo le informazioni; la seconda perchè permette di far stare in meno spazio i byte
(il massimo valore raggiungibile da un byte è 255, ossia esadecimale FF... si risparmia un carattere per visualizzarlo), ma soprattutto
per ragioni di praticità a me oscure.Nella base binaria, le cifre disponibili sono due: 0 e 1. Non ci sono decine, centinaia e migliaia (ossia potenze di dieci), ma duine, quartine e ottine (ossia potenze di due, dato che siamo in base 2). Se, infatti, in decimale il numero 145 assume il significato di 1 centinaio + 4 decine + 5 unità, allora in binario il numero 101 assumerà il significato di 1 quartina, 0 duine e 1 unità (ossia 4 + 1 = 5). Esattamente come in decimale, la n-esima cifra a sinistra sarà moltiplicata per 2n-1:
11001 = 1 * 24 + 1 * 23 + 0 * 22 + 0 * 21 + 1 * 20 = 16 + 8 + 0 + 0 + 1 = 25Nei successivi tutorial, i numeri in base 2 saranno evidenziati in blu.
In base 16, invece, ci sono, ovviamente, 16 cifre disponibili: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e ed f. Le lettere rappresentano gli interi decimali (notare il gioco di parole) da 10 a 15. Anche qui non ci sono migliaia, centinaia e decine, ma gruppi dal nome impronunciabile di 4096, 256 e 16. Ad esempio, il numero a5b assumerà il significato di 10 256ine + 5 esadecine + 11 unità. Esattamente come in decimale, la n-esima cifra a sinistra sarà moltiplicata per 16n-1:
2a7e = 2 * 163 + 10 * 162 + 7 * 161 + 14 * 160 = 8192 + 2560 + 112 + 14 = 10878Nei successivi tutorial, i numeri in base 16 saranno evidenziati in verde.
Byte, bit, word, nybble... facciamo un po' di ordine
L'unità minima di informazione che il compuer riesce a processare è il bit, che da solo può assumere i valori 0 e
1. L'insieme di 4 bit è un nybble, unità di misura usata molto poco, che può assumere valori da 0 (| SI | IEEE | ||
| Prefisso (sigla) | Fattore | Prefisso (sigla) | Fattore |
| Kilo (k) | 103 | Kibi (ki) | 210 |
| Mega (M) | 106 | Mebi (Mi) | 220 |
| Giga (G) | 109 | Gibi (Gi) | 230 |
| Tera (T) | 1012 | Tebi (Ti) | 240 |
| Peta (P) | 1015 | Pebi (Pi) | 250 |
| Exa (E) | 1018 | Exbi (Ei) | 260 |
Endianness
"It is allowed on all hands, that the primitive way of breaking eggs, before we eat them, was upon the larger end; but his present
majesty's grandfather, while he was a boy, going to eat an egg, and breaking it according to the ancient practice, happened to cut one of
his fingers. Whereupon the emperor his father published an edict, commanding all his subjects, upon great penalties, to break the smaller
end of their eggs. The people so highly resented this law, that our histories tell us, there have been six rebellions raised on that
account; wherein one emperor lost his life, and another his crown. These civil commotions were constantly fomented by the monarchs of
Blefuscu; and when they were quelled, the exiles always fled for refuge to that empire. It is computed that eleven thousand persons have at
several times suffered death, rather than submit to break their eggs at the smaller end. Many hundred large volumes have been published
upon this controversy: but the books of the Big-endians have been long forbidden, and the whole party rendered incapable by law of holding
employments."
Jonathan Swift, Gulliver's Travels, Book 1, Chapter IV
Traduzione:
"È evidente da tutti i punti di vista che il primitivo modo di rompere le uova prima di mangiarle era dalla parte dell'estremità più grande; ma, quando era ragazzo, al nonno di sua maestà, volendo mangiarsi un uovo e rompendolo secondo quell'antica pratica, accadde di tagliarsi un dito. Dopodiché, l'imperatore suo padre pubblicò un editto ordinando a tutti i suoi sudditi sotto la minaccia di grandi pene di rompere le uova dalla parte dell'estremità più piccola. La gente si risentì in tal modo che - la nostra storia ce lo dice - ci furono sei ribellioni scoppiate con questa giustificazione; un imperatore perse la vita, e un altro la corona. Questi moti di popolo erano costantemente fomentati dai monarchi dell'isola di Blefuscu; e quando loro [i ribelli] venivano repressi, gli esiliati andavano sempre a rifugiarsi presso quell'impero. È calcolato che 1100 persone, in più occasioni, preferirono sopportare la morte, piuttosto che sottomettersi a rompere le uova alla parte piccola. Molte centinaia di libri importanti furono pubblicati circa questa controversia: ma i libri dei Big-endians sono stati dimenticati a lungo, e la totalià di essi fu resa incapace dalla legge di mantenere un impiego."
Da questa bella storiella tratta dai viaggi di Gulliver, romanzo di Jonathan Swift, possiamo trarre due importanti conclusioni:
- Se rompete un uovo, fatelo dall'estremità più piccola
- I programmatori hanno il senso dell'umorismo
Quando un byte viene posto nella memoria, i suoi bit non sempre vengono scritti nell'ordine logico in cui si trovano, ma seguono un altro tipo di ordine, che varia a seconda della famiglia di processori a cui la macchina appartiene. In genere, tutti gli Intel usano il modo Little-Endian, mentre Motorola e IBM usano il Big-Endian. In quest'ultimo, il bit più significativo viene posto all'inzio del byte. Dato che si indica il bit più significativo con Most Significant Bit (MSB) e quello meno significativo con Least Significant Bit (LSB), il byte avrà questa struttura, dove ogni numero rappresenta un bit:
MSB 7 6 5 4 3 2 1 0 LSB |---| |---|Il MSB è quel bit che rappresenta il valore più alto. Ad esempio, nel numero
Il sistema Little-Endian pone i MSB alla fine, arrivando a soluzioni piuttosto strane. Considerate una word in Little-Endian: l'ordine dei bit quale sarà?
LSB 8 9 10 11 12 13 14 15 MSB LSB 0 1 2 3 4 5 6 7 MSB |---| Byte 1 |----| |---| Byte 2 |---|Come si vede dallo schema, ogni byte va per proprio conto. Il motivo per cui viene usato il Little-Endian mi è oscuro...
The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.



