Byte, esadecimale e testo
La lettera A è memorizzata come 65, cioè 01000001. In UTF-8 una sillaba coreana come U+D55C occupa tre byte.
Prima un indovinello quotidiano. (È un esempio inventato.) Uno studente scrive in chat la parola Korean, sei lettere. Un amico scrive la stessa parola in alfabeto coreano, che richiede tre sillabe. Quale messaggio è più grande? Probabilmente non quello che diresti. Salvate in UTF-8, le sei lettere inglesi sono 6 byte. Le tre sillabe coreane sono 9 byte, tre ciascuna. RFC 3629, lo standard che definisce UTF-8, usa proprio questa parola come uno dei suoi esempi e ne elenca i byte: ED 95 9C EA B5 AD EC 96 B4. Due cose spiegano la differenza. Serve un modo breve per scrivere i byte, e serve l'accordo che trasforma le lettere in numeri.
Due cifre esadecimali per ogni byte
Quelle coppie di lettere e cifre sono in esadecimale (in inglese hex). Le lunghe file di 0 e 1 sono difficili da leggere, quindi i programmatori usano questa abbreviazione. L'esadecimale ha sedici cifre: da 0 a 9, poi da A a F per i valori da dieci a quindici. Una cifra esadecimale copre esattamente quattro bit, quindi un byte è sempre due cifre esadecimali. Dividi 01000001 in 0100 e 0001. Sono 4 e 1, quindi il byte è 0x41, dove 0x dice solo «questo è esadecimale». In decimale vale 4 × 16 + 1 = 65.
Probabilmente hai già incontrato l'esadecimale senza accorgertene. I colori delle pagine web si scrivono spesso come #RRGGBB, un byte ciascuno per la luce rossa, verde e blu (MDN). #FF0000 è il rosso pieno: 255 nel primo byte, 0 negli altri due. #FFFFFF è il bianco. Il byte più grande, 11111111, è 0xFF, e 0xFF = 15 × 16 + 15 = 255.
A vale 65 perché tutti si sono messi d'accordo
Un computer non ha idea di che cosa sia una lettera. Memorizza un numero, e tutti si accordano in anticipo su quale numero indica quale lettera. L'accordo usato nelle prime reti era l'ASCII, e l'RFC 20 lo fissò per ARPANET nel 1969. L'ASCII usa 7 bit, quindi ha 128 codici. La A maiuscola è 65, la B è 66, e così via fino alla Z a 90. La a minuscola è 97. Sono esattamente 32 in più di A, una differenza di un solo bit. Anche le cifre sono codici. Il carattere 0 è 48, quindi il carattere «7» è memorizzato come 55, non come il numero 7.
Trascina per ruotare. Scorri o avvicina le dita per lo zoom.
Perché una sillaba coreana richiede tre byte
128 codici bastano e avanzano per l'inglese, ma sono lontanissimi dal bastare per coreano, arabo, cinese o emoji. Unicode dà a ogni carattere dei sistemi di scrittura del mondo un numero proprio, chiamato punto di codice, fino a U+10FFFF. UTF-8 (RFC 3629) è il modo più comune di trasformare quei numeri in byte, usando da uno a quattro byte per carattere. I 128 caratteri ASCII mantengono i loro vecchi codici di un byte, quindi un testo inglese semplice è identico in ASCII e in UTF-8. La tabella dell'RFC mette ogni punto di codice da U+0800 a U+FFFF nella riga dei tre byte, e le sillabe coreane stanno in quell'intervallo. Una é accentata occupa due byte, una sillaba coreana come U+D55C ne occupa tre e un'emoji come 😀 ne occupa quattro. Il primo byte annuncia perfino la lunghezza. ED è 11101101, e i suoi tre 1 iniziali dicono che questo carattere è lungo tre byte.
| Carattere | Punto di codice | Byte UTF-8 (esadecimale) | Byte |
|---|---|---|---|
| A | U+0041 | 41 | 1 |
| a | U+0061 | 61 | 1 |
| é | U+00E9 | C3 A9 | 2 |
| Sillaba coreana (U+D55C) | U+D55C | ED 95 9C | 3 |
| 😀 | U+1F600 | F0 9F 98 80 | 4 |
Il testo illeggibile è fatto dei byte giusti letti con l'accordo sbagliato
Un file di testo semplice è solo questi byte in fila, nient'altro. La parola Hello salvata in UTF-8 è cinque byte: 48 65 6C 6C 6F in esadecimale, cioè 72, 101, 108, 108, 111 in decimale. Le due l sono lo stesso byte ripetuto. Ora apri quel file, o uno in coreano, con l'accordo sbagliato, per esempio una vecchia codifica coreana o giapponese invece di UTF-8. Il programma legge gli stessi identici byte come caratteri diversi. Nel file non c'è nulla di rotto, e riaprirlo come UTF-8 riporta il testo com'era.
Dove sono finiti i 34 GB mancanti
Dato che 2 alla 10 fa 1024, vicino a 1000, per molto tempo si è usato «kilobyte» per entrambi. Nel dicembre 1998 la IEC ha approvato nomi distinti, e il NIST li elenca: 1 kB è 1000 byte ma 1 KiB, un kibibyte, è 1024 byte; 1 MB è 1 000 000 byte ma 1 MiB è 1 048 576 byte. I produttori di dischi contano in potenze di dieci. Un disco venduto come 500 GB contiene 500 000 000 000 byte. Un sistema operativo che conta in potenze di due divide per 1 073 741 824 e mostra circa 465.66 GiB. I circa 34 che sembrano spariti non ci sono mai stati. I due numeri usano semplicemente unità diverse. La differenza cresce con l'unità: un KiB è più grande di un kB del 2.4%, un GiB è più grande di un GB di circa il 7.4%.
- «1 KB è esattamente 1000 byte ovunque.» Secondo lo standard, kB significa 1000 byte e 1024 byte sono un KiB. Nella pratica i vecchi nomi si usano ancora in entrambi i modi. Il NIST fa notare che i produttori di memorie di solito intendono 2²⁰ byte per un megabyte, mentre i produttori di dischi intendono 1 000 000, e che il vecchio floppy da «1.44 MB» usava un terzo megabyte di 1 024 000 byte. Quando conta la dimensione esatta, cerca la i: KiB, MiB, GiB.
- «Il mio disco da 500 GB è arrivato con 34 GB in meno.» 500 000 000 000 byte ÷ 1 073 741 824 ≈ 465.66 GiB. Stessi byte, unità diversa. 500 − 465.66 ≈ 34.34, e quella differenza sono i 34 «mancanti».
- «Un carattere occupa sempre un byte.» In UTF-8 vale solo per i 128 caratteri ASCII. é occupa 2 byte, una sillaba coreana 3 e 😀 4, quindi un limite contato in byte si riempie circa tre volte più in fretta con un testo coreano che con uno inglese.
- «Il carattere 7 è memorizzato come il numero 7.» Il carattere «7» ha codice 55, cioè 00110111. Un programma che legge «7» da un testo deve trasformarlo nel numero 7 prima di poterci fare dei calcoli.
- Quanto vale 0x41 in decimale?
- Quanto vale 0xFF in decimale?
- Quanti bit rappresenta una cifra esadecimale?
- In ASCII A è 65. Che numero è C?
- Di quanto è più grande il codice di a rispetto a quello di A?
- Quanti codici ha l'ASCII a 7 bit?
- Quanti byte occupa in UTF-8 la sillaba coreana U+D55C?
- Quale carattere è memorizzato come 01000010?
- B
- A
- b
- 2
- Quanti byte ci sono in 1 MiB?
- Un disco contiene 500 000 000 000 byte. Circa quanti GiB sono? (una cifra decimale)
- Una cifra esadecimale = 4 bit; un byte = due cifre esadecimali (da 0x00 a 0xFF).
- ASCII: A = 65, a = 97, 0 = 48; 128 codici in 7 bit.
- UTF-8 usa da 1 a 4 byte per carattere; il testo ASCII resta uguale.
- 1 kB = 1000 B, 1 KiB = 1024 B; 1 MiB = 1 048 576 B.
Fonti di questo corso (9)
- (checked 2026-10-17; reordered 2026-10-19: standards first, then official documentation, then the teaching model and calculations, history sources last)
- Standards: NIST, "Prefixes for binary multiples" (physics.nist.gov/cuu/Units/binary.html: IEC approved kibi, mebi, gibi in December 1998; 1 B = 8 bit; 1 MiB = 1 048 576 B; 1 MB = 1 000 000 B; 1 GiB = 1 073 741 824 B; historical note: memory makers usually mean 2²⁰ bytes by megabyte, storage makers 1 000 000, and the "1.44 MB" diskette uses a megabyte of 1 024 000 bytes)
- IETF RFC 20 "ASCII format for Network Interchange" (1969, 7-bit codes, A = 65, a = 97, 0 = 48)
- IETF RFC 3629 "UTF-8, a transformation format of ISO 10646" (2003: 1 to 4 octets per character, ASCII unchanged, code points up to U+10FFFF, U+0800 to U+FFFF take three octets, "the first octet of a multi-octet sequence indicates the number of octets", example U+D55C U+AD6D U+C5B4 = ED 95 9C EA B5 AD EC 96 B4)
- Official documentation: MDN Web Docs, "<color>" (hexadecimal colour notation #RRGGBB)
- Intel, "Intel Chips" timeline poster (2012: Intel 4004 of 1971 with 2,300 transistors; 2nd generation Core 2010 with 1.16 billion)
- Claude E. Shannon, "A Symbolic Analysis of Relay and Switching Circuits", Transactions of the AIEE vol. 57 (1938)
- abstract of his MIT master's thesis. Computer History Museum, The Silicon Engine, "1947: Invention of the Point-Contact Transistor" (Bardeen and Brattain, December 1947, germanium)
- John von Neumann, "First Draft of a Report on the EDVAC" (30 June 1945, Moore School, reprinted in IEEE Annals of the History of Computing 15:4, 1993).
Consultato il: 2026-10-17