Calcolatrice binaria
Risultato
Binario
- Decimale
- 17
- Esadecimale
- 11
- Resto
- 0
Una calcolatrice binaria somma, sottrae, moltiplica e divide numeri scritti in base due, e mostra la risposta contemporaneamente in binario, in decimale e in esadecimale. La base due usa soltanto le cifre 0 e 1, e l'aritmetica è la stessa che già conosci: l'unica cosa che cambia è dove scatta il riporto. In decimale 9 più 1 produce un riporto perché la base è dieci; in binario lo produce 1 più 1, perché la base è due. Questo singolo fatto è tutto il calcolo binario in colonna, e da lì la sottrazione, la moltiplicazione e la divisione seguono nel modo che ti aspetti. La risposta viene stampata tre volte perché le tre letture servono a cose diverse: il binario è quello per cui sei venuto, il decimale è quello che puoi controllare a colpo d'occhio, e l'esadecimale sono gli stessi bit raggruppati quattro alla volta, che è come li legge chi scrive codice macchina. La divisione è intera, quindi il resto ha una riga tutta sua invece di sparire dietro una virgola. Un ingresso viene rifiutato quando supera la larghezza che una macchina riesce a tenere esatta, e il limite non è una scelta di questa pagina: è la larghezza a cui i numeri interi vicini smettono di essere distinguibili.
Formula
1011 + 110 = 10001 (11 + 6 = 17)
- 1011
- Il primo numero, scritto in base due. Leggerlo come base due è ciò che lo rende undici: le stesse cifre lette come decimali darebbero milleundici, ed è esattamente l'errore che questa pagina esiste per evitare
- + − × ÷
- L'operazione. Funziona cifra per cifra esattamente come in decimale, con il dieci sostituito dal due ovunque scatti un riporto o un prestito
- 1 + 1 = 10
- L'unico fatto dell'aritmetica binaria che non è già familiare. Due uno producono uno zero con un uno riportato nella posizione successiva, perché le cifre finiscono dopo l'uno. Tre uno producono 11: un uno nella risposta e un uno riportato
- somma di cifra × 2ⁿ
- Come si produce la lettura decimale: ogni cifra binaria moltiplicata per il valore della sua posizione, e i risultati sommati. È così che 10001 diventa diciassette, ed è l'unica strada fra la risposta binaria e quella decimale
- resto
- Quello che avanza quando una divisione non viene esatta. Dividendo 1011 per 10 si ottiene 101 con 1 di resto, perché undici è cinque volte due più uno. Il resto viene sempre mostrato, ed è zero per le tre operazioni che non possono lasciarne uno
- 53 bit
- Quanto può essere largo un ingresso accettato qui: fino a 9.007.199.254.740.991, che in binario è un uno seguito da cinquantatré cifre. Oltre quella larghezza un numero di macchina non riesce più a distinguere i suoi vicini e l'aritmetica smetterebbe in silenzio di essere esatta
Chi legge o scrive in binario ha bisogno di questa pagina per la stessa ragione per cui ha bisogno di una calcolatrice decimale: l'aritmetica non è difficile, ma farla a mano è lento e gli errori sono invisibili. Gli usi quotidiani sono leggere un registro hardware o una maschera di bit — 1011 AND qualcosa, oppure quali flag ha alzato un byte di stato — e controllare un valore che un compilatore, un debugger o uno strumento di rete ha stampato in binario. Le maschere di sottorete, i bit di permesso di un file, la colonna dei flag di un registro di stato della CPU e gli stati dei pin di un microcontrollore sono tutti numeri binari su cui la gente deve fare aritmetica, e la lettura esadecimale accanto alla risposta è la forma in cui quei valori vengono effettivamente scritti quando qualcuno li documenta. L'altro uso è imparare: la regola del riporto è la cosa che tutti sbagliano sulla carta esattamente una volta, e digitare 1011 più 110 e vedere comparire 10001 è un modo più rapido di correggerla di un esempio svolto su un libro. Chi affronta le basi di numerazione a mano, e chi riconverte in qualcosa di controllabile un listato di codice macchina, trova nelle due letture decimale ed esadecimale quasi tutto il lavoro già fatto.
Esempi svolti
Somma di 1011 e 110
- Allinea i due numeri a destra: 1011 e 0110
- Colonna più a destra: 1 + 0 = 1
- Colonna successiva: 1 + 1 = 10, quindi scrivi 0 e riporta 1
- Colonna successiva: 0 + 1 + l'uno riportato = 10, quindi scrivi 0 e riporta 1
- Colonna più a sinistra: 1 + l'uno riportato = 10, quindi scrivi 0 e riporta 1 in una posizione nuova
- Il risultato si legge 10001, che in decimale è 16 + 1 = 17
L'esempio di apertura della pagina, e il modo più rapido di vedere la regola del riporto in funzione: la somma è più lunga di entrambi gli ingressi perché l'ultimo riporto ha avuto bisogno di una posizione propria. La lettura decimale, 17, è il controllo — 11 più 6 fa davvero 17 — e l'esadecimale 11 sono gli stessi bit raggruppati quattro alla volta, ed è per questo che assomiglia all'undici decimale. La coincidenza sparisce appena i numeri crescono.
Divisione di 1011 per 10
- Questa è una divisione fra undici e due, quindi la risposta è cinque con uno di resto
- Cinque in binario è 101, e uno è 1
- La pagina riporta il quoziente come 101 e il resto come 1 invece di stampare 101,1
L'esempio che mostra perché la riga del resto esiste. Stampato come solo quoziente, 101 direbbe che undici diviso due fa cinque, e la riga sotto è ciò che rende vera l'affermazione. C'è una seconda ragione per non tirare in ballo una virgola: nel momento in cui un risultato ha una parte frazionaria l'aritmetica può smettere di terminare — uno diviso tre in binario va avanti all'infinito — e qui ingressi e uscite sono interi dall'inizio alla fine.
Sottrazione di 1011 da 110
- Questa è una sottrazione fra sei e undici, quindi la risposta è negativa
- La differenza è cinque, e il segno viene portato davanti al risultato
- Cinque è 101, quindi la risposta è -101
Qui non si usa il complemento a due, lo schema con cui un processore memorizza i numeri negativi. Il segno meno resta un segno davanti al numero, che è la forma che usa chi scrive sulla carta e la forma che resta leggibile quando il valore viene stampato accanto alle sue letture decimale ed esadecimale. La rappresentazione che ne darebbe una macchina sarebbe una sequenza di bit a larghezza fissa, e quella larghezza non è una cosa che questa pagina abbia.
Limiti
Questa pagina lavora solo su numeri interi. Non esiste una virgola binaria né un binario frazionario, quindi 1.01 non viene accettato — il che significa anche che una divisione che non viene esatta produce un quoziente e un resto invece di uno sviluppo decimale, con il quoziente troncato verso lo zero e non arrotondato. Gli ingressi sono limitati a 9.007.199.254.740.991, un uno seguito da cinquantatré cifre binarie, il che in esadecimale è 1FFFFFFFFFFFFF; oltre quella larghezza l'aritmetica non può più essere garantita esatta, e un ingresso così grande viene rifiutato invece di ricevere una risposta approssimata. Il campo di ingresso accetta solo cifre e un eventuale segno meno iniziale: va scritto 9007199254740991, senza i punti di separazione delle migliaia, perché è la stessa funzione che legge il valore a rifiutarli. I risultati hanno lo stesso tetto, quindi una moltiplicazione che lo supera segnala un errore invece di restituire un numero sbagliato. I numeri negativi si scrivono con un segno meno davanti e non in complemento a due, e non si presume né si offre nessuna larghezza di bit fissa: qui 1011 è quattro bit, non i quattro bit bassi di un registro. La divisione per zero viene rifiutata.
Domande frequenti
- Perché 1 + 1 fa 10 e non 2?
- Perché in base due non esiste una cifra per il due. Le cifre sono 0 e 1 e poi la colonna finisce, esattamente come la colonna delle unità finisce dopo il 9 in decimale. Quindi due uno producono uno zero in quella colonna e riportano un uno in quella successiva, il che si scrive 10 — ed è la stessa affermazione di 9 + 1 = 10 in decimale, con la base cambiata. Tre uno producono 11: un uno nella risposta e un uno riportato.
- Perché c'è sempre una riga per il resto anche quando sommo o moltiplico?
- Perché il pannello dei risultati è un elenco fisso e non un elenco che cresce e si accorcia secondo l'operazione scelta, e una riga che comparisse e sparisse sarebbe più difficile da leggere di una riga che sta sempre nello stesso posto. Sottrarre, sommare e moltiplicare non possono lasciare un resto fra numeri interi, quindi lì la riga legge 0: quello zero è la riga che dice che l'operazione non ne ha lasciato nessuno, non un calcolo che non è stato fatto. La divisione è l'unica operazione che può lasciarne uno, e la riga è ciò che impedisce a un quoziente troncato di sembrare una risposta esatta.
- Qual è il numero più grande che posso inserire?
- 9.007.199.254.740.991, che in binario è cinquantatré uno e in esadecimale è 1FFFFFFFFFFFFF. Il limite è la larghezza alla quale una macchina smette di riuscire a distinguere numeri interi vicini, quindi oltre quel punto l'aritmetica smetterebbe in silenzio di essere esatta: il risultato sembrerebbe un numero e non lo sarebbe. Va però digitato senza separatori di migliaia, perché il campo accetta solo cifre. Un ingresso più largo viene rifiutato con un messaggio invece di essere troncato o arrotondato, e anche un risultato che supera lo stesso tetto viene rifiutato.
- Posso fare una sottrazione e ottenere un risultato negativo?
- Sì. Metti il numero più grande nella seconda casella e la risposta torna con un segno meno davanti, in tutte e tre le letture. Non è il complemento a due, la rappresentazione che un processore usa quando memorizza un numero negativo in bit a larghezza fissa: è la forma con il segno davanti, quella che scriveresti sulla carta e che resta leggibile accanto a una lettura decimale e a una esadecimale. Non si presume nessuna larghezza di bit, quindi una risposta negativa non viene richiusa dentro una sequenza di uno.
- Perché la divisione non è esatta?
- Perché questa pagina lavora su numeri interi, quindi una divisione che non viene pari dà il quoziente troncato verso lo zero più il resto. Undici diviso due fa cinque con uno di resto, e la pagina riporta 101 e 1 invece di 101,1. È una scelta deliberata e non una lacuna: nel momento in cui un risultato ha una parte frazionaria l'aritmetica può non terminare — uno diviso tre in binario è uno sviluppo periodico — e una pagina che lo arrotondasse in silenzio stamperebbe un numero che non è la risposta.
- A cosa serve la lettura esadecimale?
- È lo stesso valore raggruppato quattro bit alla volta, che è come legge il binario chi scrive codice macchina. Un byte è otto bit e quindi esattamente due cifre esadecimali, perciò FF, 2A e B2 sono le forme che compaiono nella documentazione, nei debugger e nei datasheet. Convertire fra binario ed esadecimale non è davvero un calcolo: è un raggruppamento, ed è per questo che qui la lettura è gratis.
Riferimenti
- Binary number — the base-two system, positional notation, the carry rule and the arithmetic operations — Wolfram MathWorld (United States)
- Number base — why a numeral's value depends on its position and on the base, and how the same quantity is written in different 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 di numerazione posizionale e la base, cioè ciò che rende una colonna capace di riportare su quella successiva — Treccani, Istituto della Enciclopedia Italiana (Italia)