Sommario:
Video: C - 22 - Conversione da decimale a binario 2024
Le variabili C ++ sono memorizzate internamente come i cosiddetti numeri binari. I numeri binari sono memorizzati come una sequenza di valori 1 e 0 noti come bit. La maggior parte delle volte non hai davvero bisogno di gestire i numeri a livello di bit; tuttavia, ci sono occasioni in cui farlo è conveniente. C ++ fornisce un insieme di operatori per questo scopo.
I cosiddetti operatori logici bit a bit operano sui loro argomenti a livello di bit. Per capire come funzionano, esaminare come i computer memorizzano le variabili.
Il sistema di numeri decimali
I numeri conosciuti come numeri decimali perché sono basati sul numero 10. In generale, il programmatore esprime C ++ variabili come numeri decimali. Quindi, si direbbe che il valore di var è 123, ad esempio.
Un numero come 123 si riferisce a 1 * 100 + 2 * 10 + 3 * 1 . Ciascuno di questi numeri di base - 100, 10 e 1 - è una potenza di 10.
123 = 1 * 100 + 2 * 10 + 3 * 1
Espresso in modo leggermente diverso ma equivalente:
123 = 1 * 10 2 + 2 * 10 1 + 3 * 10 0
Ricorda che qualsiasi numero alla potenza zero è 1.
Altri sistemi numerici
L'uso di un numero base di 10 per il sistema di conteggio deriva, con ogni probabilità, dal fatto che gli esseri umani hanno 10 dita, gli strumenti di conteggio originali. L'alternativa sarebbe stata la base 20.
Se i cani hanno inventato il nostro schema di numerazione, potrebbe essere stato basato sul numero 8 (una cifra di ciascuna zampa è fuori dalla vista sulla parte posteriore della gamba). Tale sistema ottale avrebbe funzionato altrettanto bene:
123 10 = 1 * 8 2 + 7 * 8 1 + 3 * 8 0 = 173 8
I piccoli 10 e 8 qui si riferiscono al sistema di numerazione, 10 per decimale (base 10) e 8 per ottale (base 8). Un sistema di conteggio può utilizzare qualsiasi base positiva.
Il sistema di numeri binari
I computer hanno essenzialmente due dita. (Forse è per questo che i computer sono così stupidi: senza un pollice opponibile, non riescono a cogliere nulla e poi di nuovo, forse no.) I computer preferiscono contare usando la base 2. Il numero 123 10 sarebbe espresso come:
123 10 = 0 * 128 + 1 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 1 * 2 + 1 * 1
= 01111011 < 2 È sempre convenzione esprimere numeri binari usando 4, 8, 32 o 64 cifre binarie anche se le cifre iniziali sono zero. Questo è anche a causa del modo in cui i computer sono costruiti internamente.
Poiché il termine
cifra si riferisce a un multiplo di dieci, una cifra binaria viene chiamata un bit . Il termine deriva da cifre binarie (b-) (-it).Otto bit costituiscono un byte. Una parola è in genere di due o quattro byte. Con una base così piccola, è necessario utilizzare un numero elevato di bit per esprimere numeri. È scomodo utilizzare un'espressione come 01111011
2 per esprimere un valore così banale come 123 10 . I programmatori preferiscono esprimere numeri per unità di byte o otto bit. Una singola cifra di quattro bit è essenzialmente base 16, poiché quattro bit possono esprimere fino a qualsiasi valore compreso tra 0 e 15. La base 16 è nota come sistema di conteggio
esadecimale . L'esadecimale viene spesso contratto semplicemente nell'esagono . Esadecimale utilizza le stesse cifre per i numeri da 0 a 9. Per le cifre tra 9 e 16, l'esadecimale utilizza le prime sei lettere dell'alfabeto: A per 10, B per 11 e così via. Pertanto, 123
10 diventa 7B 16 . 123 = 7 * 16
1 + B (cioè 11) * 16 0 = 7B 16 Poiché i programmatori preferiscono esprimere numeri in 4, 8, 32 o 64 bit, preferiscono analogamente esprimere numeri esadecimali in 1, 2, 4 o 8 cifre esadecimali anche quando le cifre iniziali sono 0.
Infine, è scomodo esprimere un numero esadecimale come 7B < 16
utilizzando un pedice, poiché i terminali non supportano i pedici. Anche su un word processor, è scomodo cambiare i font da e verso la modalità subscript solo per digitare due cifre. Pertanto, i programmatori usano la convenzione per iniziare un numero esadecimale con un 0x (la ragione per una tale convinzione strana risale ai primi giorni di C). Quindi, 7B diventa 0x7B. Usando questa convenzione, 0x7B è uguale a 123 (mentre 0x123 è uguale a 291). Tutti gli operatori matematici possono essere eseguiti su numeri esadecimali nello stesso modo in cui vengono applicati ai numeri decimali. Il motivo per cui non possiamo eseguire una moltiplicazione come 0xC * 0xE nelle nostre teste ha più a che fare con le tabelle di moltiplicazione che abbiamo appreso a scuola rispetto a qualsiasi limitazione nel sistema numerico.