Guida alla Conversione tra Basi Numeriche: Binario, Esadecimale, Ottale Spiegati
Se hai mai fissato un codice colore esadecimale come #1A2B3C o un permesso Unix come chmod 755 chiedendoti da dove vengano quei numeri, non sei il solo. Le basi numeriche sono uno di quei concetti fondamentali che la maggior parte degli sviluppatori usa ogni giorno senza pensarci due volte — finché non arriva il momento in cui devono effettivamente convertire tra una base e l'altra.
Risolviamo la questione. Questa guida analizza i sistemi numerici importanti nella programmazione, come convertire tra di essi e quando ciascuno si presenta nella pratica.
Cosa Significa Realmente "Base"?
Contiamo in base-10 (decimale) perché abbiamo dieci dita. Ogni posizione della cifra rappresenta una potenza di 10:
4 2 7
| | |
| | └── 7 × 10⁰ = 7
| └────── 2 × 10¹ = 20
└────────── 4 × 10² = 400
───
Total = 427
Questa è la notazione posizionale. La "base" (chiamata anche radice) indica quante cifre uniche esistono nel sistema e per quale valore si moltiplica ogni posizione. La base-10 ha le cifre da 0 a 9. La base-2 ha le cifre 0 e 1. La base-16 ha le cifre da 0 a 9 e le lettere da A a F.
Il concetto è identico in tutte le basi — cambiano solo il numero di simboli disponibili e il moltiplicatore per posizione.
Curiosità: i Babilonesi usavano la base-60 (sessagesimale). Ecco perché abbiamo 60 secondi in un minuto e 360 gradi in un cerchio.
Binario (Base-2): Il Linguaggio dell'Hardware
Perché i Computer Usano il Binario
I computer funzionano con i transistor, e i transistor hanno due stati affidabili: acceso e spento. Questo corrisponde perfettamente a 1 e 0. In teoria si potrebbe costruire un computer in base-3, ma distinguere tra tre livelli di tensione è più difficile e soggetto a errori rispetto a distinguerne due. Il binario vince perché è semplice e robusto.
Leggere i Numeri Binari
Il binario funziona come il decimale, ma ogni posizione rappresenta una potenza di 2:
1 0 1 1 0 1
| | | | | |
| | | | | └── 1 × 2⁰ = 1
| | | | └────── 0 × 2¹ = 0
| | | └────────── 1 × 2² = 4
| | └────────────── 1 × 2³ = 8
| └────────────────── 0 × 2⁴ = 0
└────────────────────── 1 × 2⁵ = 32
──
Total = 45
Quindi 101101 in binario equivale a 45 in decimale. Si legge da destra a sinistra, raddoppiando il valore posizionale ogni volta: 1, 2, 4, 8, 16, 32, 64, 128...
Bit, Nibble, Byte e Oltre
- Bit: una singola cifra binaria (0 o 1)
- Nibble: 4 bit (rappresenta una cifra esadecimale, valori da 0 a 15)
- Byte: 8 bit (valori da 0 a 255)
- Kilobyte: 1.024 byte (2¹⁰)
Un singolo byte può rappresentare 256 valori diversi, ed è per questo che i caratteri ASCII stanno in un byte e i canali di colore RGB vanno da 0 a 255.
Fondamenti di Aritmetica Binaria
L'addizione in binario segue le stesse regole del decimale, ma il riporto avviene a 2 invece che a 10:
1 0 1 1 (11 in decimal)
+ 0 1 1 0 ( 6 in decimal)
─────────
1 0 0 0 1 (17 in decimal)
Quando 1 + 1 = 10 in binario (proprio come 9 + 1 = 10 in decimale), si scrive 0 e si riporta 1.
Ottale (Base-8): Il Sistema Ereditato
Breve Excursus Storico
L'ottale era popolare negli anni '60 e '70 con macchine come il PDP-8, che utilizzava word a 12 bit — divisibili perfettamente in quattro gruppi di tre bit. Ogni cifra ottale corrisponde esattamente a tre cifre binarie, rendendola una comoda abbreviazione.
Dove Si Incontra Ancora l'Ottale
Il contesto più comune oggi sono i permessi dei file Unix. Quando digiti chmod 755 script.sh, ogni cifra è un numero ottale che rappresenta i permessi di lettura (4), scrittura (2) ed esecuzione (1):
7 = 4 + 2 + 1 = rwx (owner: read, write, execute)
5 = 4 + 0 + 1 = r-x (group: read, execute)
5 = 4 + 0 + 1 = r-x (others: read, execute)
Le cifre ottali nella programmazione usano il prefisso 0o (o semplicemente uno zero iniziale in C, cosa che ha causato parecchi bug):
const permissions = 0o755; // 493 in decimal
console.log(permissions.toString(8)); // "755"
Attenzione in JavaScript e Python: uno zero iniziale come 0755 potrebbe essere interpretato come ottale in alcuni contesti. Usa sempre il prefisso esplicito 0o per evitare ambiguità.
Esadecimale (Base-16): Il Preferito degli Sviluppatori
Perché Esiste l'Esadecimale
L'esadecimale risolve un problema pratico: i numeri binari diventano lunghi velocemente. Il numero decimale 255 è 11111111 in binario — otto cifre. In esadecimale è semplicemente FF. Ogni cifra esadecimale corrisponde esattamente a quattro cifre binarie (un nibble), rendendo le conversioni banali e mantenendo i numeri compatti.
L'esadecimale usa le cifre da 0 a 9 più le lettere da A a F:
| Decimale | Binario | Hex |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 15 | 1111 | F |
L'Esadecimale nel Mondo Reale
I colori web sono l'uso più visibile dell'esadecimale. #FF5733 si scompone così:
#FF5733
││││││
││││└┘── Blue: 0x33 = 51
││└┘──── Green: 0x57 = 87
└┘────── Red: 0xFF = 255
Gli indirizzi di memoria nei debugger sono visualizzati in esadecimale: 0x7FFF5FBFFA10 è più leggibile del suo equivalente decimale 140.734.799.804.944.
Gli indirizzi MAC usano coppie esadecimali separate da due punti: A4:83:E7:2B:00:1F.
Colori in CSS: rgba(255, 87, 51, 1.0) e #FF5733 rappresentano lo stesso colore — l'esadecimale è semplicemente più compatto.
Convertire tra Basi
Da Decimale a Binario
Dividi ripetutamente per 2 e raccogli i resti, leggendoli dal basso verso l'alto:
45 ÷ 2 = 22 remainder 1 ↑
22 ÷ 2 = 11 remainder 0 │
11 ÷ 2 = 5 remainder 1 │ Read upward:
5 ÷ 2 = 2 remainder 1 │ 101101
2 ÷ 2 = 1 remainder 0 │
1 ÷ 2 = 0 remainder 1 │
Risultato: 45 in decimale = 101101 in binario.
Da Decimale a Esadecimale
Stesso approccio, ma si divide per 16:
427 ÷ 16 = 26 remainder 11 (B) ↑
26 ÷ 16 = 1 remainder 10 (A) │ Read upward: 1AB
1 ÷ 16 = 0 remainder 1 │
Risultato: 427 in decimale = 1AB in esadecimale.
Da Binario a Hex (La Più Facile)
Raggruppa le cifre binarie in gruppi di quattro (da destra a sinistra) e converti ogni gruppo:
Binary: 10 1101
Padded: 0010 1101
Groups: 2 D
Result: 0x2D
Verifica: 0x2D = 2×16 + 13 = 45 ✓
Da Hex a Binario
Inverti il processo. Espandi ogni cifra esadecimale in quattro cifre binarie:
Hex: F A 3
Binary: 1111 1010 0011
Result: 111110100011
Consiglio: memorizza i pattern binari da 0 a F (sono solo 16). Una volta che li conosci, le conversioni hex↔binario avvengono istantaneamente nella tua testa. Inizia con le potenze di due: 1=0001, 2=0010, 4=0100, 8=1000.
Notazione delle Basi Numeriche nei Linguaggi di Programmazione
Ogni linguaggio di programmazione principale ha una sintassi per scrivere numeri in basi diverse:
// JavaScript
const binary = 0b101101; // 45
const octal = 0o55; // 45
const hex = 0x2D; // 45
const decimal = 45; // 45
(45).toString(2); // "101101"
(45).toString(8); // "55"
(45).toString(16); // "2d"
parseInt("101101", 2); // 45
parseInt("55", 8); // 45
parseInt("2D", 16); // 45
# Python
binary = 0b101101 # 45
octal = 0o55 # 45
hexval = 0x2D # 45
bin(45) # '0b101101'
oct(45) # '0o55'
hex(45) # '0x2d'
int("101101", 2) # 45
int("55", 8) # 45
int("2D", 16) # 45
// C / C++
int binary = 0b101101; // 45 (C23 / GCC extension)
int octal = 055; // 45 (leading zero = octal!)
int hex = 0x2D; // 45
Nota la trappola del C: uno zero iniziale significa ottale. Scrivere int x = 010; restituisce 8, non 10. Questo ha ingannato innumerevoli programmatori.
Casi d'Uso Pratici
Operazioni Bitwise e Flag
const READ = 0x01; // 0001
const WRITE = 0x02; // 0010
const EXECUTE = 0x04; // 0100
const ADMIN = 0x08; // 1000
let permissions = READ | WRITE; // 0x03 = 0011
if (permissions & EXECUTE) {
// check if execute bit is set
}
Debug e Ispezione della Memoria
Quando vedi un segfault all'indirizzo 0xDEADBEEF o inizializzi la memoria con 0xCAFEBABE, queste sono costanti esadecimali scelte appositamente perché facili da individuare nei dump di memoria. I file class di Java iniziano con il magic number 0xCAFEBABE — e sì, qualcuno si è divertito a scegliere quel nome.
Protocolli di Rete
Gli indirizzi IPv6 usano la notazione esadecimale: 2001:0db8:85a3:0000:0000:8a2e:0370:7334. Indirizzi MAC, ID vendor USB e UUID Bluetooth utilizzano tutti la rappresentazione esadecimale perché mantiene i dati binari compatti e leggibili.
Provalo Tu Stesso
Evita i calcoli manuali. Il nostro Convertitore di Basi Numeriche gestisce conversioni tra qualsiasi base all'istante — decimale, binario, ottale, esadecimale o qualsiasi base personalizzata fino a 36. Incolla un numero, scegli la base di origine e quella di destinazione, e ottieni il risultato immediatamente. Tutto viene eseguito nel tuo browser, quindi nulla viene inviato a un server.
È particolarmente utile quando hai bisogno di:
- Eseguire il debug di dump di memoria esadecimali convertendoli in decimale
- Calcolare i permessi Unix in binario/ottale
- Verificare i codici colore tra esadecimale e valori RGB
- Convertire tra basi che non sono potenze di due
Risorse Correlate
- Spiegazione della Codifica Base64 — Base64 usa un approccio diverso (gruppi di 6 bit mappati su 64 caratteri) per codificare il binario come testo
- Confronto degli Algoritmi di Hash — gli output degli hash sono tipicamente visualizzati in esadecimale
- Convertitore di Basi Numeriche — converti tra qualsiasi base all'istante nel tuo browser
🛠️ Provalo ora: Convertitore di Basi Numeriche — converti tra binario, ottale, decimale, esadecimale e qualsiasi base fino a 36. 100% lato client, completamente gratuito.