Un computer ha, ovviamente, bisogno di fare delle operazioni con i suoi bit, in modo da giungere ai risultati che noi ci aspettiamo... 

Le operazioni con i bit prendono il nome di ALGEBRA BOOLEANA (dal nome del suo ideatore: George BOOLE [1815-1864] uno con due ATTRIBUTI DI BRONZO, lasciatemelo dire... ) 

Cominciamo dalla prima operazione: la NEGAZIONE (NOT
Essa semplicemente INVERTE il valore del bit: quindi NOT 1 = 0 e NOT 0=1 
Se ci pensate è abbastanza semplice: se NON E' 1.... NON PUO' ESSERE ALTRO CHE 0... non vi pare ?? 

Per definire un'operazione booleana, si utilizza la tavola di verità , cioè una semplice tabella in cui si mettono i risultati dell'operazione, cosa semplice da fare, poichè ci sono solo 4 combinazioni possibili... 
Visto che abbiamo parlato di verità , è bene specificare che 1 = VERO e 0 = FALSO 

Ora vediamo l'OR ("OPPURE"): 
L'operazione OR è VERA se ALMENO UNO dei termini è VERO, se preferite si può anche dire che l'operazione OR viene 1 se almeno uno dei termini è 1 

La tavola di verità è ora semplice da definire... 
OR 0 = 0 
OR 1 = 1 
OR 0 = 1 
OR 1 = 1 

In maniera del tutto analoga abbiamo l'operazione AND ("E", nel senso di congiunzione) 

L'operazione AND è VERA se TUTTI i termini sono VERI, se preferite si può anche dire che l'operazione AND viene 1 se TUTTI i termini sono 1 
La tavola di verità è ancora molto semplice: 
AND 0 = 0 
AND 1 = 0 
AND 0 = 0 
AND 1 = 1 

Anche nell'algebra booleana valgono le parentesi, che indicano di fare prima l'operazione in esse contenuta, altrimenti l'ordine in cui si fanno le operazioni è 1°) NOT, 2°) AND, 3°) OR 

Un piccolo esempio: 

1 AND 0 OR 1 AND 1 OR 0 

prima si fanno gli AND, quindi viene: 

OR 1 OR 0 = 1 

Se invece avessi scritto 

(1 AND 0) OR 1 AND (1 OR 0) 

Prima dovrei fare le parentesi, quindi: 

OR 1 AND 0 

Poi gli AND... 

OR 0 = 0 

La tabella ASCII è un codice convenzionale usato per la rappresentazione dei caratteri di testo attraverso i byte: ad ogni byte viene fatto corrispondere un diverso carattere della tastiera (lettere, numeri, segni). 
In realtà lo standard ASCII copre solo i primi 128 byte (da 00000000 a 01111111), i successivi byte fino al 256 costituiscono la tabella ASCII estesa che presenta varie versioni a carattere nazionale. 
Nella tabella ASCII standard si trovano le cifre numeriche, le lettere maiuscole e minuscole (maiuscole e minuscole hanno codici ASCII differenti) la punteggiatura, i simboli aritmetici e altri simboli ($, &, %, @, #, ecc.). Essendo stata concepita in America, la tabella ASCII standard non comprende le lettere accentate (sconosciute all'ortografia inglese). 
I primi 32 byte della tabella standard sono inoltre riservati per segnali di controllo e funzioni varie.

 

Codifica binaria (8-bit) Codifica Esadecimale Codifica Decimale Codifica ASCII
0 0 0 NUL
1 1 1 SOH
10 2 2 STX
11 3 3 ETX
100 4 4 EOT
101 5 5 ENQ
110 6 6 ACK
111 7 7 BEL
1000 8 8 BS
1001 9 9 HT
1010 A 10 LF
1011 B 11 VT
1100 C 12 FF
1101 D 13 CR
1110 E 14 SO
1111 F 15 SI
10000 10 16 DLE
10001 11 17 DC1
10010 12 18 DC2
10011 13 19 DC3
10100 14 20 DC4
10101 15 21 NAK
10110 16 22 SYN
10111 17 23 ETB
11000 18 24 CAN
11001 19 25 EM
11010 1A 26 SUB
11011 1B 27 ESC
11100 1C 28 FS
11101 1D 29 GS
11110 1E 30 RS
11111 1F 31 US
100000 20 32 SPACE
100001 21 33 !
100010 22 34 "
100011 23 35 #
100100 24 36 $
100101 25 37 %
100110 26 38 &
100111 27 39 '
101000 28 40 (
101001 29 41 )
101010 2A 42 *
101011 2B 43 +
101100 2C 44 ,
101101 2D 45 -
101110 2E 46 .
101111 2F 47 /
110000 30 48 0
110001 31 49 1
110010 32 50 2
110011 33 51 3
110100 34 52 4
110101 35 53 5
110110 36 54 6
110111 37 55 7
111000 38 56 8
111001 39 57 9
111010 3A 58 :
111011 3B 59 ;
111100 3C 60 <
111101 3D 61 =
111110 3E 62 >
111111 3F 63 ?
1000000 40 64 @
1000001 41 65 A
1000010 42 66 B
1000011 43 67 C
1000100 44 68 D
1000101 45 69 E
1000110 46 70 F
1000111 47 71 G
1001000 48 72 H
1001001 49 73 I
1001010 4A 74 J
1001011 4B 75 K
1001100 4C 76 L
1001101 4D 77 M
1001110 4E 78 N
1001111 4F 79 O
1010000 50 80 P
1010001 51 81 Q
1010010 52 82 R
1010011 53 83 S
1010100 54 84 T
1010101 55 85 U
1010110 56 86 V
1010111 57 87 W
1011000 58 88 X
1011001 59 89 Y
1011010 5A 90 Z
1011011 5B 91 [
1011100 5C 92 \
1011101 5D 93 ]
1011110 5E 94 ^
1011111 5F 95 _
1100000 60 96 `
1100001 61 97 a
1100010 62 98 b
1100011 63 99 c
1100100 64 100 d
1100101 65 101 e
1100110 66 102 f
1100111 67 103 g
1101000 68 104 h
1101001 69 105 i
1101010 6A 106 j
1101011 6B 107 k
1101100 6C 108 l
1101101 6D 109 m
1101110 6E 110 n
1101111 6F 111 o
1110000 70 112 p
1110001 71 113 q
1110010 72 114 r
1110011 73 115 s
1110100 74 116 t
1110101 75 117 u
1110110 76 118 v
1110111 77 119 w
1111000 78 120 x
1111001 79 121 y
1111010 7A 122 z
1111011 7B 123 {
1111100 7C 124 |
1111101 7D 125 }
1111110 7E 126 ~
1111111 7F 127 DEL



Non spaventatevi per i simboli strani: molti sono più semplici di quanto non crediate... per esempio il CR, che trovate in corrispondenza del byte 13... non è altro che il Carriage Return: cioè la semplice andata a capo. 

Abbiamo visto che il codice binario utilizza solo due SIMBOLI per rappresentare qualsiasi quantità, simboli che sono "0" e "1". 

Bene, due soli simboli sono MOLTO FACILI da rappresentare con gli strumenti che sono a disposizione in un Computer: elettricità, interruttori, ecc... 

Nei computers esistono componenti elettronici che possono avere o NON avere "corrente". Queste "correnti" sono anche facilmente misurabili, anche perchè non ci interessa una misura precisa, ma solo sapere se CI SONO o NON CI SONO. 

Se c'è corrente il valore del codice binario è "1", se la corrente non c'è allora il valore è "0". 

(Ho usato il termine "corrente", perchè è quello con cui genericamente si indica la presenza o assenza di fenomeni elettrici, per la precisione vi dico che il valore che si misura, in realtà, è quello di una tensione continua: agli inizi tale tensione assumeva i valori di +5 Vcc (5 Volt in tensione continua) e 0 Vcc oppure anche + 5 Vcc e - 5 Vcc, per indicare rispettivamente "1" e "0"; oggi si usano anche tensioni inferiori, così si risparmia... il PC consuma meno) 

Lo stesso concetto, vista la facilità di rappresentazione, si applica, più o meno, ad ogni componente che debba memorizzare i dati. Ad esempio un hard disk: in esso le testine leggono valori di carica magnetica, presenti, o NON presenti, in determinate aree della superficie dei piatti del disco.

Abbiamo visto che con il codice binario rappresentiamo tutte le quantità con solo due simboli. 
Questi due simboli rappresentano la MINIMA informazione possibile: c'è o non c'è tensione sul componente di base. 
Questa informazione prende il nome di BIT: Basic Information Technology. 
Un singolo bit può assumere quindi i valori 0 o 1. 
DUE bit possono assumere 4 valori diversi (22=4): 00,01,10,11 i quali rappresentano i numeri 0,1,2,3 
OTTO bit possono assumere 256 valori diversi (28=256): da 00000000 a 11111111, che rappresentano i numeri da 0 a 255 

Un insieme di OTTO bit prende il nome di BYTE, un byte è quindi un'altra unità di misura che può assumere 256 valori diversi. 
Questi valori, per convenzione, vengono usati in un PC, per rappresentare le cifre da 0 a 9, tutte le lettere, maiuscole e minuscole, tutti i simboli di punteggiatura, ed altri simboli. 
La corrispondenza tra bytes e simboli rappresentati è riassunta e contenuta nella cosiddetta Tabella ASCII standard

Per mezzo dei bytes, si compongono le parole, le istruzioni, i programmi che il PC è in grado di interpretare, per fare... quello che vogliamo noi !! (Quasi sempre... he he he !!) 

Ricordandoci che alla base di tutto c'è sempre il codice binario, e quindi che stiamo ragionando in base 2, vediamo ora altre unità di misura: 

1 Kilobyte = 1 Kb = 1024 Bytes (1024 perchè 210=1024) 
1 Megabyte = 1 Mb = 1024 Kb = 1.048.576 bytes 
1 Gigabyte = 1Gb = 1024 Mb = 1.048.576 Kb = 1.073.741.824 bytes 

A titolo di curiosità, vi informo che un insieme di 4 bit prende il nome di "Nibble", oggi è in pratica inutilizzato, ma ci fu un tempo in cui tale unità di misura aveva una sua precisa motivazione. In particolare, vi basterà pensare che esistevano CPU a 4 bit.

Il codice binario 

La prima cosa da fare, per poter capire l'informatica, è quella di capire su quale linguaggio essa si basi. 

Vi sono già moltissime pagine disponibili in Internet, le quali trattano diffusamente del codice binario, io intendo utilizzare un linguaggio colloquiale, sperando che anche coloro i quali fino a questo momento non ci sono riusciti, possano comprendere questo "strano modo di contare". 

Chiunque è in grado di contare nel modo solito, ovvero basandosi sul sistema decimale, ma perchè usiamo proprio questo metodo?

Credo di poter affermare che l'uomo, in qualsiasi tempo ed in qualsiasi luogo, abbia trovato sempre molto semplice contare gli oggetti utilizzando uno strumento sempre a portata di.....MANO !! 

Infatti, sto parlando delle dita!! 

Per esempio: il numero 25, il quale, come tutti sappiamo, rappresenta 2 decine e 5 unità, vuol dire anche che, per contare tante "cose" quante sono rappresentate dal numero 25, bisogna "alzare" tutte le dita delle mani per due volte e poi "alzare" ancora cinque dita. 

Ogni nuova posizione, andando da destra verso sinistra, nel numero indica semplicemente quante volte bisogna contare completamente tutte le cifre disponibili per la posizione immediatamente a destra. La parola chiave per comprendere questo concetto è "tutte le cifre disponibili". 

Nel sistema di numerazione decimale le cifre disponibili sono,ovviamente, 10: esse sono 1,2,3,4,5,6,7,8,9,0 (ho messo apposta lo zero in fondo, per rendere più chiara la spiegazione).

Quindi si dice che 10 è la base della numerazione (ed è quindi anche la base per le operazioni di elevamento a potenza che vedremo tra un attimo) 

Così il numero 15 equivale a dire che si sono contate tutte le cifre una volta e poi ancora cinque cifre (la quantità totale, come tutti sanno, è quindi [1 x 10 + 5 x 1] cioè anche [1 decina + 5 unità]). 

Prendiamo ora come esempio un numero un po' più complicato, e ripetiamo il ragionamento: scegliamo 1296. 

Intanto vediamolo scomposto: 

posizione

cifra

1

2

9

6

significato

migliaia

centinaia

decine

unità

Potenza di 10

103

102

101

100

La tabella qui sopra è un classico, ma io vorrei rappresentare il numero 1296 utilizzando tutte le persone che servono per "contarlo". 

Ecco quindi a voi: Marco, Carlo, Dario, Ugo 

Le mani di Ugo contano da 1 a 1296, mentre lo fa i suoi amici tengono traccia del conteggio in questo modo: 
Dario alza un dito ogni volta che Ugo ha finito una serie di dieci, e ricominciato. 
[Quando Ugo ha alzato tutte le dita, vuol dire che ha contato 10, allora le abbassa subito tutte, e Dario ne alza una, questo è importante: NESSUNO resta con tutte le dita alzate] 
Carlo alza un dito ogni volta che Dario ha finito una serie di dieci, e ricominciato. 
Marco alza un dito ogni volta che Carlo ha finito una serie di dieci, e ricominciato. 

Inutile dirvi che il risultato finale sarà questo: 

Marco

Carlo

Dario

Ugo

1 dito alzato

2 dita alzate

9 dita alzate

6 dita alzate

 

Bene, ma se questi amici avessero solo DUE dita ?? 

Ecco quello che succederebbe, per contare, ad esempio, il numero 25: 

[Ricordiamo che, quando si conta in questo modo, chi sta davvero contando tutto è la persona più a destra {cioè Ugo}, e quando uno degli amici alza TUTTE le sue dita, quello che avviene è che le abbassa tutte, e chi gli sta vicino a sinistra, alza un dito, per segnalare che il suo amico ha terminato una serie ed ha ricominciato] 

Il nostro UGO, con sole due dita, quante volte le alza tutte? 
Ovviamente 25 diviso 2=12, col resto di 1 

Allora Dario dovrebbe contare il numero di volte che Ugo ha alzato tutte le dita, ma anche lui ha solo due dita, quindi le alzerà tutte per 12 diviso 2= 6 volte, col resto di ZERO 

Carlo deve contare le 6 volte che Dario ha alzato tutte le sue dita: avendone, anche lui, solo due, le alzerà 6 diviso 2 = 3 volte, col resto di ZERO 

Marco deve contare le 3 volte che Carlo ha alzato tutte le sue dita, quindi alzerà tutte le sue dita 1 volta, col resto di 1, nel senso che alzerà ancora un dito, che gli rimane alzato. 

Serve un nuovo amico: Fabio, il quale conta le volte che Marco ha ricominciato il conteggio, cioè una sola volta: Fabio resterà quindi con un solo dito alzato. 


Fabio

Marco

Carlo

Dario

Ugo

amici

1 dito alzato

1 dito alzato

nessun dito alzato

nessun dito alzato

1 dito alzato

dita

1

1

0

0

1

Cifre binarie

24

23

22

21

20

potenze di 2

1 x 24

1 x 23

0 x 22

0 x 21

1 x 20

Somma=25

Il numero 25, espresso in codice binario, è 11001. 
La base della numerazione è 2

Esattamente come per la numerazione decimale, il significato del numero 11001 è il seguente (iniziando dalla posizione più a destra, la posizione UNO, che è la posizione delle unità, cioè della potenza ZERO della base scelta per il conteggio): 

1 x 20 = 1 x 1 = 1 
0 x 21 = 0 x 2 = 0 
0 x 22 = 0 x 4 = 0 
1 x 23 = 1 x 8 = 8 
1 x 24 = 1 x 16 = 16 

e... 1+8+16= 25 !! 

La numerazione in codice binario ha solo DUE cifre, per formare tutti i numeri, esse sono "0" ed "1". 

Vediamo ora il metodo un po' meglio: 

Per trasformare il numero 324 da base 10 (decimale) a base 2 (binario) si procede per divisioni successive per la base: 


passaggio

numero

diviso per

fa

col resto di

 

1

324

2

162

0

(questa è la cifra più a DESTRA)

2

162

2

81

0

 

3

81

2

40

1

 

4

40

2

20

0

 

5

20

2

10

0

 

6

10

2

5

0

 

7

5

2

2

1

 

8

2

2

1

0

 

9

1

2

0

1

 

 

Quindi 324 in base 10 si scrive come 101000100 in base 2 !! 

Questo ovviamente vale per qualsiasi base. 

Se la base fosse 16 (codice o numerazione esadecimale), si usa lo stesso metodo, solo che essendoci solo 10 cifre, ci servono altri 6 SIMBOLI per questa nuova numerazione: per convenzione si usano le lettere maiuscole A,B,C,D,E,F 

Quindi una A in numerazione esadecimale vale 10, una B vale 11... e così via fino alla F che vale 15. E tutto torna... (Infatti dividendo per 16 posso ottenere un resto che va da 0 a 15) 

Se ti sono stato utile, per favore considera
una piccola donazione per i costi del server