Skip to main content
Esadecimale
FF

Guida al sistema esadecimale

Hexadecimal System

The hexadecimal system uses 16 symbols: 0-9 and A-F (A=10, B=11, C=12, D=13, E=14, F=15). It's a shorthand for binary - each 4 bits is one hex digit. Example: 11111111₂ = FF₁₆ = 255₁₀. Used in programming and colors.

Perché l'esadecimale è importante

255 in binario è 11111111 (8 cifre). In esadecimale FF (2 caratteri): più facile da leggere e digitare. Indirizzi di memoria, colori RGB e code point Unicode usano l'esadecimale. Definizioni di colore in CSS: #FF0000 (rosso), #00FF00 (verde), #0000FF (blu).

Applicazioni pratiche

Nei colori CSS: #3498db blu, #2ecc342 verde. Negli UUID v5: 550e8400-ea29-41d3-af15-6528adf68cc2. Dump ROM/EEPROM in esadecimale. Indirizzi MAC: aa:bb:cc:dd:ee:ff. Nei debugger, indirizzi di memoria come 0x0040A7C0.

#888 non è #808080, e la forma breve CSS copre lo 0,02% dei colori

L'esadecimale è binario compatto: una cifra vale esattamente quattro bit, quindi due cifre fanno un byte. Per questo un colore si scrive come tre coppie. La forma breve CSS a tre cifre si espande raddoppiando ogni cifra invece di riscalarla, il che significa che la maggior parte dei colori non ha alcuna forma breve, grigio medio compreso.

Come funziona

  • Converte tra esadecimale, decimale e binario, con ogni cifra esadecimale pari a quattro bit.
  • Gestisce i valori di colore, dove due cifre esadecimali danno i 256 livelli di un canale.
  • Rende esplicita la corrispondenza cifra-bit, su cui poggiano tutte queste convenzioni.
1 cifra esadecimale  = 4 bit = 16 valori (0–F)
2 cifre esadecimali  = 8 bit = 256 valori (00–FF)

#RRGGBB = 3 canali × 8 bit = 24 bit = 16.777.216 colori
la forma breve #RGB si espande raddoppiando: #F0A → #FF00AA

Esempio pratico

Confrontare la forma completa a sei cifre con quella breve a tre.

  1. #RRGGBB sono 24 bit: 16.777.216 colori
  2. #RGB sono 12 bit: 4.096 colori
  3. la forma breve copre lo 0,0244% dello spazio
  4. #888 si espande in #888888 = 136 per canale
  5. ma il grigio medio è #808080 = 128 per canale

#888 e #808080 differiscono di 8 livelli su ogni canale, e nessun codice a tre cifre produce #808080. La forma breve non è un'abbreviazione di tutti i colori: è un piccolo sottoinsieme che si dà il caso possa scriversi in metà caratteri.

Come leggere il risultato

  • L'espansione raddoppia la cifra, non riscala l'intervallo. #A diventa #AA, non un valore collocato in proporzione: per questo la tavolozza breve cade su 0x00, 0x11, 0x22 e così via a passi di 17, saltando tutto ciò che sta in mezzo.
  • L'esadecimale sopravvive perché la corrispondenza col binario è esatta e meccanica. Un byte è sempre due caratteri, la conversione non richiede aritmetica e non c'è arrotondamento che introduca errore: le stesse ragioni per cui si usa per hash, indirizzi MAC e dump di memoria.
  • Le maiuscole non contano nei valori di colore né in gran parte dei parser: #FF00AA e #ff00aa sono identici. Contano negli hash solo dove una specifica lo dice, e confrontare stringhe esadecimali senza normalizzare il caso è una frequente fonte di falsi disallineamenti.
  • Il prefisso 0x segnala l'esadecimale in gran parte dei linguaggi, # lo segnala in CSS, e alcuni contesti non ne usano nessuno. Una stringa nuda di cifre e lettere è ambigua: 10 è dieci in decimale e sedici in esadecimale, e i caratteri non dicono quale.

Domande frequenti

Perché i colori si scrivono in esadecimale e non in decimale?
Perché ogni canale è un byte e un byte è esattamente due cifre esadecimali. In decimale lo stesso colore è rgb(255, 0, 170): tre numeri di lunghezza variabile con separatori, contro sei caratteri fissi che si dividono nettamente in canali.
Si può sempre abbreviare un colore esadecimale?
Solo quando ogni coppia è una cifra ripetuta. #FF00AA si abbrevia in #F0A perché ogni coppia si ripete; #808080 non si può abbreviare affatto, perché 80 non è una cifra raddoppiata. Circa un colore su 4.096 ha una forma breve.