Convertitore da decimale a binario
Risultato
Binario
- Valori posizionali
- 16 + 1
Un convertitore da decimale a binario scrive un numero nelle cifre che una macchina usa davvero, e lo fa con un metodo che si può eseguire a mano su un foglietto. Si divide il numero per due, si mette da parte il resto, e si continua a dividere il quoziente per due finché non arriva a zero. I resti letti dal basso verso l'alto sono le cifre della risposta. La ragione per cui si legge al contrario è che ogni divisione trova la cifra meno significativa di ciò che resta: il primo giro fissa il posto delle unità, il secondo quello dei due, il terzo quello dei quattro, e così via, quindi i giri percorrono la risposta da destra a sinistra. Ogni resto può valere soltanto zero oppure uno, perché il divisore è due, ed è questo a garantire che il risultato sia una sequenza binaria e non una sequenza di numeri qualsiasi. Il metodo si ferma quando il quoziente arriva a zero perché un quoziente nullo significa che non c'è più niente di acceso sopra la posizione corrente. La pagina mostra ogni passaggio invece del solo risultato, perché la scala di divisioni è il posto in cui si sbaglia: il resto finale dimenticato o la colonna letta dall'alto in basso danno una risposta che sembra plausibile e non lo è.
La divisione di 17 per due, un passaggio alla volta, finché il quoziente arriva a zero
| Passaggio | Divisione | Quoziente | Resto |
|---|---|---|---|
| 1 | 17 ÷ 2 | 8 | 1 |
| 2 | 8 ÷ 2 | 4 | 0 |
| 3 | 4 ÷ 2 | 2 | 0 |
| 4 | 2 ÷ 2 | 1 | 0 |
| 5 | 1 ÷ 2 | 0 | 1 |
Questo è il metodo e non un risultato, ed è per questo che resta fisso su 17 mentre il pannello qui sopra converte quello che hai digitato. Leggi la colonna dei resti dal basso verso l'alto e compaiono in ordine le cifre della risposta: 1, 0, 0, 0, 1, cioè 10001. La ragione per cui la colonna va letta in su è che ogni divisione trova la cifra meno significativa di ciò che rimane: il primo giro fissa il posto delle unità, il secondo quello dei due, e così via, quindi i giri percorrono la risposta da destra a sinistra. La ragione per cui il procedimento può fermarsi quando il quoziente arriva a zero è che un quoziente nullo significa che sopra la posizione corrente non è acceso più niente. Due dettagli che vale la pena notare nella tabella: ogni resto è 0 oppure 1 e non può essere altro, perché il divisore è due; e il quoziente si riduce a meno della metà a ogni giro, ed è per questo che la scala anche per il più grande ingresso ammesso è lunga una cinquantina di righe soltanto. Se stai convertendo un altro numero, segui le stesse quattro colonne sulla carta: la tabella ti dice quali sono le colonne, non quali saranno i tuoi numeri.
Formula
17 ÷ 2 = 8 r 1 → 8 ÷ 2 = 4 r 0 → 4 ÷ 2 = 2 r 0 → 2 ÷ 2 = 1 r 0 → 1 ÷ 2 = 0 r 1 ⇒ 17 = 10001 = 16 + 1
- 17
- Il numero di partenza, scritto nella base in cui la gente conta. È l'unica cosa che cambia da una conversione all'altra: tutto il resto del metodo è fisso e non dipende dal valore
- ÷ 2
- Il divisore, che è due perché la base di arrivo è due. Non cambia mai durante una conversione, e non cambia da un numero all'altro: è la base scritta come numero
- quoziente
- Quello che resta della divisione, cioè la parte intera del risultato. È il numero che si porta al giro successivo, ed è la ragione per cui la scala prima o poi finisce: a ogni giro il quoziente si riduce a meno della metà, quindi anche il più grande ingresso ammesso richiede circa cinquanta righe
- resto
- Quello che avanza, e non può che essere zero oppure uno, perché il divisore è due. È una cifra della risposta. Ogni giro ne produce una, e la sequenza dei resti è la risposta stessa scritta al contrario
- ⇒ 10001
- La risposta, ottenuta leggendo la colonna dei resti dal basso verso l'alto. L'ordine è l'unica cosa che conta in questo passaggio: gli stessi cinque valori letti dall'alto in basso darebbero 10001 scritto al rovescio
- 16 + 1
- La verifica: la risposta riletta come somma di potenze di due deve ridare il numero di partenza. È il controllo che si può fare a mente e che coglie l'errore più frequente, cioè una cifra persa leggendo la scala
- 53 bit
- La lunghezza massima della risposta. Il numero più grande che si può convertire è 9.007.199.254.740.991, cioè cinquantatré uno, perché oltre quella larghezza un numero di macchina non tiene più separati numeri interi vicini e la risposta smetterebbe di essere esatta pur restando plausibile
Questa conversione serve quando si deve scrivere un numero in una forma che una macchina accetti come sequenza di bit, oppure quando si vuole capire quali bit sono accesi in un valore che si conosce solo in decimale. Il caso pratico più frequente è la maschera di bit: si parte da un numero che si sa già — i permessi 755 di un file, il canale rosso 178 di un colore, il valore 128 di un flag — e serve sapere quali posizioni contiene, perché è in quelle posizioni che si andrà a lavorare. Il secondo caso è la costruzione di una costante da scrivere in codice, dove il binario si usa per documentare quali bit sono previsti e l'esadecimale per scriverli. Il terzo è didattico, e vale la pena dirlo perché è il modo in cui questa pagina viene usata più spesso: la scala di dimezzamenti è la dimostrazione più breve del fatto che la notazione posizionale in base due è solo una convenzione di scrittura e non una proprietà dei numeri, e chi la esegue una volta su un numero qualsiasi non ha più bisogno di imparare a memoria le potenze di due per convertire. In tutti questi casi la pagina dà anche i passaggi e non solo la risposta, perché è nei passaggi che si può ricontrollare il risultato quando qualcosa non torna.
Esempi svolti
Scrivere 17 in binario
- 17 ÷ 2 = 8, resto 1
- 8 ÷ 2 = 4, resto 0
- 4 ÷ 2 = 2, resto 0
- 2 ÷ 2 = 1, resto 0
- 1 ÷ 2 = 0, resto 1
- Il quoziente è arrivato a zero, quindi il metodo si ferma
- Leggendo i resti dal basso verso l'alto si ottiene 10001
- Verifica: 16 + 1 = 17
La scala completa per il numero più piccolo che ne richieda più di tre righe. Il controllo che conviene fare sempre è l'ultimo passaggio: rileggendo i resti come potenze di due si deve ritrovare il numero di partenza, e se non lo si ritrova l'errore è quasi sempre una cifra persa leggendo la colonna. Le posizioni accese sono la prima e l'ultima, perché diciassette è sedici più uno: non a caso i numeri che si convertono in una sequenza corta sono quelli vicini a una potenza di due.
Scrivere un byte intero, 255
- 255 ÷ 2 = 127, resto 1
- 127 ÷ 2 = 63, resto 1
- 63 ÷ 2 = 31, resto 1
- 31 ÷ 2 = 15, resto 1
- 15 ÷ 2 = 7, resto 1
- 7 ÷ 2 = 3, resto 1
- 3 ÷ 2 = 1, resto 1
- 1 ÷ 2 = 0, resto 1
- Tutti i resti valgono 1, quindi la risposta è otto uno: 11111111
255 è il valore più grande che sta in un byte e si converte in otto uno, che è il motivo per cui in esadecimale è FF: due cifre, entrambe al massimo. Gli otto resti sono tutti uno perché il numero è uno in meno della potenza di due successiva, e questo è l'unico caso in cui la scala non contiene nemmeno uno zero: qualunque numero che sia una potenza di due meno uno dà una sequenza di uno tutti di fila, e 255 è quello che si incontra più spesso perché è la dimensione del byte.
Una potenza di due, 16
- 16 ÷ 2 = 8, resto 0
- 8 ÷ 2 = 4, resto 0
- 4 ÷ 2 = 2, resto 0
- 2 ÷ 2 = 1, resto 0
- 1 ÷ 2 = 0, resto 1
- Leggendo i resti dal basso verso l'alto si ottiene 10000
- La somma dei pesi è 16 da solo, perché una sola posizione è accesa
Una potenza di due produce un uno seguito da tanti zeri quante sono le unità dell'esponente: 16 è 2⁴, quindi la risposta è un uno e quattro zeri. Riconoscere questa forma a vista è utile perché è l'unica in cui la somma dei pesi si riduce a un termine solo, e perché la lunghezza della risposta dice subito qual è l'esponente. Il rovescio è il caso dell'esempio precedente: una potenza di due meno uno dà tutti uno della stessa lunghezza, e fra i due estremi si trova qualunque altro numero.
Gli zeri iniziali non cambiano il valore
- Gli zeri davanti al numero non cambiano il suo valore: 00017 è diciassette
- La scala di divisioni è quindi identica a quella del primo esempio
- La risposta è ancora 10001, e la somma dei pesi è ancora 16 + 1
Gli zeri iniziali vengono accettati e ignorati, come in tutte le pagine di questa famiglia. Il caso si incontra più spesso di quanto sembri, perché i valori copiati da registri, file di configurazione e fogli di calcolo arrivano con la larghezza del campo già addosso: un permesso scritto come 0755, un codice di colore a sei cifre, un contatore a otto posizioni. Rifiutarli obbligherebbe a ripulire il valore a mano prima di poterlo usare, e non protegge da nessun errore, perché la cifra a zero in testa non ha un valore da confondere.
Limiti
Il convertitore accetta un numero intero in decimale, con un segno meno opzionale e con eventuali zeri iniziali, e non accetta altro: niente punto o virgola per una parte frazionaria, niente spazi, niente separatori di migliaia. Il campo di ingresso non gradisce i punti di separazione delle migliaia che si usano in italiano: va scritto 9007199254740991 e non 9.007.199.254.740.991, perché è la stessa funzione che legge il valore a rifiutare qualsiasi carattere che non sia una cifra. La risposta è sempre un numero intero positivo o negativo, senza virgola, e la divisione per due non produce mai un risultato frazionario perché ogni passaggio scarta la parte decimale e la conserva come resto. Il numero massimo convertibile è 9.007.199.254.740.991, cioè cinquantatré cifre binarie; un ingresso più grande viene rifiutato con un messaggio invece di essere convertito, perché oltre quella larghezza i numeri interi vicini non sono più distinguibili e la risposta sembrerebbe esatta senza esserlo. Un numero negativo viene convertito nel suo valore assoluto e la risposta porta il segno meno davanti: non è il complemento a due, e la pagina non accetta valori scritti in quella notazione. La scala di passaggi mostrata negli esempi è quella per il numero dell'esempio e non per il numero digitato, quindi le righe non cambiano quando cambia l'ingresso: sono la dimostrazione del metodo, non il calcolo della conversione in corso.
Domande frequenti
- Perché i resti si leggono dal basso verso l'alto?
- Perché ogni divisione trova la cifra meno significativa di quello che resta, non la più significativa. Il primo giro divide il numero intero per due e il suo resto dipende solo dalla parità del numero, quindi riguarda il posto delle unità; il secondo giro lavora sulla metà e riguarda il posto dei due; il terzo il posto dei quattro. I giri percorrono quindi la risposta da destra a sinistra, e per rimetterla nell'ordine in cui si scrive bisogna rileggere la colonna al contrario. Leggendola dall'alto in basso si ottiene la risposta rovesciata, che è l'errore più frequente di questa conversione e anche il più insidioso, perché il risultato è una sequenza di cifre binarie perfettamente valida che però vale un numero diverso.
- Quando mi fermo?
- Quando il quoziente arriva a zero. A quel punto non c'è più niente da dividere, il che significa che sopra la posizione corrente non è acceso nessun bit, e ogni divisione ulteriore darebbe zero con resto zero all'infinito. Il numero di passaggi necessari non si conosce in anticipo, ma si sa che è dell'ordine del logaritmo in base due del numero: ogni giro dimezza il quoziente, quindi un numero intorno al migliaio richiede una decina di righe e il più grande ingresso ammesso ne richiede una cinquantina. È questa riduzione rapida a rendere il metodo praticabile a mano anche su numeri grandi.
- Perché i resti possono essere solo 0 o 1?
- Perché il resto di una divisione è sempre più piccolo del divisore, e il divisore è due. I valori possibili si riducono quindi a zero e uno, e non è una coincidenza fortunata ma la ragione per cui il metodo funziona: se i resti potessero assumere altri valori la sequenza prodotta non sarebbe una scrittura in base due. Lo stesso ragionamento vale per qualunque base, ed è il motivo per cui la conversione da decimale a esadecimale divide per sedici: lì i resti possono arrivare fino a quindici, e i valori oltre il nove vanno sostituiti con le lettere da A a F.
- Come faccio a controllare che la risposta sia giusta?
- Rileggendo la risposta come somma di potenze di due e verificando che ridia il numero di partenza, che è il controllo stampato accanto al risultato. Si prendono le posizioni in cui compare un uno, contate da destra a partire da zero, e si sommano le potenze corrispondenti. Per 10001 le posizioni accese sono la zero e la quattro, quindi 1 + 16 = 17, che è il numero da cui si era partiti. Il controllo coglie l'errore più comune, cioè una cifra persa leggendo la scala, perché una cifra mancante cambia la somma mentre l'occhio non se ne accorge guardando la sequenza.
- Posso convertire un numero con la virgola o con i separatori di migliaia?
- No, per ragioni diverse. I separatori di migliaia non sono accettati perché il campo legge solo cifre e un eventuale segno meno, quindi un valore va digitato come 9007199254740991 e non come 9.007.199.254.740.991. La virgola invece non è accettata perché questa pagina lavora su numeri interi: la conversione di una parte frazionaria richiede un procedimento diverso, con moltiplicazioni successive invece di divisioni, e un convertitore che la ignorasse in silenzio restituirebbe un numero diverso da quello digitato senza dirlo.
- Perché la tabella mostra sempre 17 anche se io ho digitato un altro numero?
- Perché mostra il metodo e non il risultato: la scala dei passaggi è la dimostrazione di come si converte, e per essere leggibile deve riferirsi a un numero concreto e noto. Il pannello qui sopra è ciò che risponde sul numero digitato, la tabella è ciò che spiega il procedimento una volta per tutte. Le due cose non sono in contraddizione quando i numeri non coincidono, e vale la stessa avvertenza che accompagna le tabelle delle altre pagine di questa famiglia: una tabella fissa accanto a un pannello che cambia è la norma, non un errore.
Riferimenti
- Binary number — positional notation, place values, and the conversion between base two and base ten — Wolfram MathWorld (United States)
- Number base — why a numeral's value depends on its position and on the base, and how one quantity is written in several bases — Wolfram MathWorld (United States)
- IEEE 754 — the double-precision format these calculations are carried out in, and the 53-bit significand that fixes this page's input ceiling — IEEE Standards Association (United States)
- Numerazione — il sistema posizionale e il resto della divisione per la base come cifra del numero scritto in quella base — Treccani, Istituto della Enciclopedia Italiana (Italia)