Il codice binario e' una sequenza di numeri in base 2. Questo sta a significare che dispone di due numeri soltanto: 0 e 1.
Un esempio di codice binario puo' essere il seguente:
Questo codice binario equivale al valore 8. Vediamo perche'.
Ogni numero che compone un valore binario e' formato da 1 bit. Questo significa che il numero binario 0001 equivale a 4 bit (quindi il valore 1 vale 4 bit, ma solitamente se ne includono 8 per comodita'). 8 bit formano 1 Byte, da cui poi nascono i KiloByte, i MegaByte, i GigaByte e i TeraByte. La seguente tabella mostra com'e' formata la memoria dei bit (sappiamo che 8 bit = 1 byte):
1024 Byte = 1 KiloByte
1024 KiloByte = 1 MegaByte
1024 MegaByte = 1 GigaByte
1024 GigaByte = 1 TeraByte
Adesso che abbiamo visto la memoria dei bit, vediamo come poter convertire un numero da base 2 a base 10 e viceversa.
Abbiamo il seguente numero binario:
00001010
Si procede in questo modo: considerando che i numeri sono in base 2, si parte da destra con il valore 2 elevato 0, poi si arriva al numero direttamente successivo a quello destro (quindi da 2 elevato 0 si va a 2 elevato 1), poi a quello successivo e cosi' via. In questo caso si prendono i numeri del codice binario e si moltiplicano per 2 elevato N, ergo, il valore mostrato di sopra e' facilmente convertibile in questo modo:
00001010 = (0 * 2^7) + (0 * 2^6) + (0 * 2^5) + (0 * 2^4) + (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (0 * 2^0)
00001010 = 0 + 0 + 0 + 0 + 8 + 0 + 2 + 0 = 10
Facile, no?
Per convertire invece un numero da base 10 a base 2, bisogna dividere il numero per due e conservare il resto, infine, si leggera' il risultato dei resti nel senso inverso. Meglio chiarire il tutto con l'esempio precedente:
10/2 = 0
05/2 = 1
04/2 = 0
02/2 = 0
00/2 = 0
.............
Il resto e' da trattare a parte, poiche' abbiamo considerato i numeri in base 10 come 8 bit.
Ci sono poi naturalmente i numeri ottali (numeri in base 7, ossia con valori che vanno da 0 a 7), i numeri esadecimali (numeri in base 16, ossia con valori che vanno da 0 a F - 0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F), che hanno rispettivamente come valore 8 e 16 (quindi anziche' 2^N, 8^N e 16^N...).
Adesso introdurro' gli operatori logici, ossia coloro che esprimono la logica di un'espressione, per valutare se essa e' vera o falsa (rispettivamente 1 e 0). Tra questi introdurro' i piu' generici, ossia l'AND, l'OR, il NOT e lo XOR.
Se si hanno ricordi di matematica, esattamente della logica, si sa che e' possibile esprimere la logica di un'espressione attraverso questo modo (considerando naturalmente che 0 = falso e 1 = vero):
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0
NOT 1 = 0
NOT 0 = 1
1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
Quando poi si apprendera' la programmazione si scopriranno gli operatori bit per bit, che, a differenza di quelli logici, valutano due valori (quindi i rispettivi codici binari) bit per bit, ossia un numero per volta. Immaginando quindi di avere i seguenti numeri: 1 e 2, gli operatori logici (quelli che non valutano bit per bit) restituiranno da questa espressione 1 (vero), poiche' ogni valore all'infuori dello 0 equivale come vero (tranne per lo XOR, esso restituira' 0, basta andare a rileggere la tabella precedente), mentre gli operatori bit per bit restituiranno 0, andiamo a vedere perche'.
1 = 00000001 (in binario, per comodita' a 8 bit)
2 = 00000010 (sempre in binario, a 8 bit)
(operatore logico)
00000001 AND 00000010 = 00000010 (l'AND esegue la moltiplicazione tra i due valori)
(operatore bit per bit)
00000001 AND 00000010 = 00000000
(perche' 1 AND 2 = 0?)
1 AND 2 = 0
0 AND 0 = 0
0 AND 0 = 0
0 AND 0 = 0
0 AND 0 = 0
0 AND 0 = 0
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
Lo stesso dicasi per gli altri operatori, che applicano la propria regola (1 OR 2 = 3, ad esempio).
Spero di aver reso l'idea. (Puo' darsi che ho sbagliato qualcosa, non so spiegarmi tanto bene)