IL CODICE BINARIO • Il codice binario • Codifica posizionale • Aritmetica binaria www.stoianov.it 1 CODIFICA DI BASE • La voce si distribuisce con onde di frequenze 20-20.000 Hz • La luce sta nel ordine di 500.000.000.000.000 Hz • Per poter ricevere informazioni trasportati da loro, l’evoluzione ha creato diversi sensori. • Al interno del cervello, il codice neurale di base è lo stesso: una “spike”. • Una rappresentazione comune per tutti i tipi di dati permette l’uso di una sola tecnologia per manipolarle e memorizzarle. • I circuiti digitali elaborano due tipi di segnale elettrico: tensione bassa (0) e tensione alta (1) … ciò permette di codificare informazioni a due livelli – bit. • Questa CODIFICA BINARIA, anche se in apparenza limitante, permette elaborazioni precise e affidabili. www.stoianov.it 2 1 Il CODICE BINARIO • Un bit ha due livelli: 0 e 1 • Per codificare informazioni a più livelli, aggregare più bit in una “parola” binaria, per es. “101” • Ogni bit raddoppia il numero di livelli che possono essere rappresentati da una parola. • La parola binaria più conosciuta “byte” ha 8 bit e permette di codificare informazioni a 256 livelli. • Tutti i dati in un calcolatore sono codificati con il codice binario, anche se per la comunicazione con l’utente si usano altri codici (lettere:ASCII, numeri: la sistema decimali, ecc). 100 b/s = 100 bit/sec 2.4 kb/s = 2400 bit / sec parola a 3 bit 000 001 010 011 100 101 110 111 = = = = = = = = 0 1 2 3 4 5 6 7 10 kB = 10 K Byte = 10 * 1.024 Byte 1 MB = 1 M Byte = 1.048.576 Byte www.stoianov.it 3 Codificare informazioni “non-numerici” con il codice binario 000000000000000000000000 000000000011111111000000 000000000010000010000000 000000000010000100000000 000000000010001000000000 000000000010010000000000 000000000010100000000000 000000000011000000000000 000000000010000000000000 IMMAGINE: lo stato momentaneo di una porzione dello spazio visivo rappresentato da una matrice di “pixel” • rappresentazione a “bianco/nero”: 1 bit per pixel: 0:chiaro, 1:scuro (o viceversa) • rappresentazione in ‘toni di grigio’: 1 byte per pixel, con 256 gradazioni di grigio per punto • rappresentazione a ‘colori’: 3 bytes x pixel, 1 byte per l’intensità di ciascun dei colori R,G,B SUONO pressione sonora nel tempo tempo tempo • rappresentazione “mono, 10kHz a 8 bit”: l’intensità di un segnale acustico “campionato” ogni 0.1 ms. e “quantificato” con 1 byte • rappresentazione “stereo, 20kHz, 16 bit”: l’intensità di due segnali acustici, ciascuno codificato ogni 0.05 ms con 2 byte. www.stoianov.it 4 2 CODIFICA POSIZIONALE Numeri Arabi: 263 = 2*100 + 6*10 + 3*1 = 2*102 + 6*101 + 3*100 Numeri Binari: 101 = 1*4 + 0*2 =1*22 + 0*21 + 1*1 + 1*20 In un codice posizionale a base b: • ciascuna cifra d ha b livelli [ 0 … b-1 ] • la posizione k vale bk (la più significativa a sinistra) • il valore del numero [dn-1…d0]b = dn-1*bn-1 + ... + d0*b0 • un numero con n cifre può codificare bn livelli [0 … bn-1] www.stoianov.it 5 CONVERSIONE A BASE b Quale è il codice posizionale a base b di un valore X ? Algoritmo: dividere k volte il valore X per la base b, ottenendo una parte intera e resto. Il resto di ogni divisione k dà la cifra bk-1 alla posizione k-1. Esempio: X = 25 25 / 2 = 12 resta 12 / 2 = 6 resta 6 / 2 = 3 resta 3 / 2 = 1 resta 1 / 2 = 0 resta X2=11001 1 0 0 1 1 www.stoianov.it 6 3 Codice Esadecimale: Base 16 • Cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A10, B11, C12, D13, E14, F15 • Il codice esadecimale si trasforma facilmente (d)al codice binario: ogni 4 bit = 1 cifra esadecimale 0101 1110 = 9 = E • Questo codice è molto utilizzato per rappresentare dati e programmi nel computer, perché “compatta” numeri binari in gruppi di 4 bit. www.stoianov.it 7 ARITMETICA BINARIA Aritmetica con numeri a qualunque base b si effettua come l’aritmetica decimale, tendendo conto ai: - riporti (nell’addizione, se la somma ≥ la base b) e - prestiti (in sottrazione, se il minuendo < il sottraendo) Se la somma di due cifre binarie supera 2, si fa riporto. Addizioni semplici 0+ 0+ 1+ 1+ 0= 1= 0= 1= 0 1 1 10 Addizioni di numeri con più cifre 0110+ 0100= 1010 www.stoianov.it 8 4 NUMERI NEGATIVI • Numeri Arabi: Codice binario: • Soluzione: il simbolo “-” indica numeri negativi. solo 0 e 1. Come codificare ‘-’ ? rappresentare il segno con il bit maggiore. • Tre codifiche (in un codice binario con n bit ): (A) Segno e modulo |X| 3 = 0 011 -3 = 1 011 (stessi bit del modulo) (B) Complimento a base -1 (a uno) 2n - |X| - 1 3 = 0 011 -3 = 1 100 (bit invertiti) (C) Complimento a base (a due) 2n - |X| 3 = 0 011 -3 = 1 101 (bit invertiti + 1) www.stoianov.it 9 Complimento a Due • La codifica “complimento a due” semplifica l’aritmetica. • Singola rappresentazione di 0 (0000 invece di anche 1111) • Il codice di –X lungo n bit = il codice binario di 2n -|X| CODIFICA: (i) codificare |X| in binario (ii) invertire i bit di |X|2 (iii) aggiungere 1 Esempio: -3, codice 3+1 cifre |-3| Æ 0011 0011 Æ 1100 1100 +1 Æ 1101 DECODIFICA (ottenere il valore assoluto |X|) (i) invertire i bit di |X|2 1101 Æ 0010 (ii) aggiungere 1 0010 +1 Æ 0011 (iii) calcolare il valore 0011 Æ 0+0+2+1=3 Si nota: un numero negativo ha sempre il bit maggiore 1 ed un numero positivo ha sempre il bit maggiore 0 www.stoianov.it 10 5 Complimento a 2 Esempi • 01000 codifica un numero positivo di valore 8 z 00000 codifica un numero “positivo” di valore 0 10001 codifica un numero negativo di valore: -15(10) (01110 -> 01111(2) ) z 11111 codifica un numero negativo di valore: (00000 -> 00001(2 )) -1(10) z 10000 codifica un numero negativo di valore: (01111 -> 1000(2) ) -16(10) Attenzione, qui “1” codifica valore, ma non segno perché questo codice non è più il codice “complimento a 2” ma un semplice codice binario. z www.stoianov.it 11 ARITMETICA BINARIA (2) Somma: sommare le cifre nelle corrispondente posizioni; fare riporto se la somma ≥ la base. Sottrazione: invertire il sottraendo, utilizzando complimento a 2 e quindi sommare i due numeri. Attenzione! la somma di due numeri entrambi positivi o negativi potrebbe risultare in risultato con valore assoluto maggiore della capacità rappresentativa (situazione OVERFLOW). Individuare l’OVERFLOW: - se la somma di due numeri positivi risulta un numero “negativo”, - se la somma di due numeri negativi risulta in un numero “positivo” - se gli ultimi due riporti sono diversi www.stoianov.it 12 6 Aritmetica binaria: Esempi 00000 Riporti -> non c'è overflow (ultimi rapporti uguali) 00001 (numero positivo di valore 1(10)) + 01000 (numero positivo di valore 8(10)) = 01001 (numero positivo di valore 9(10)) 00000 Riporti -> non c'è overflow (ultimi rapporti uguali) 00001 (numero positivo di valore 1(10)) + 11000 (numero negativo di valore: 00111->01000(2)=-8(10)) = 11001 (numero negativo di valore 00110->00111(2)=-7(10)) 11000 Riporti -> non c'è overflow (ultimi rapporti uguali) 01001 (numero positivo di valore 9(10)) + 11000 (numero negativo di valore: 00111->01000(2)=-8(10)) = 00001 (numero positivo di valore 1(10)) www.stoianov.it 13 Aritmetica binaria: Esempi (2) 10000 Riporti -> situazione OVERFLOW (ultimi rapporti diversi) 10001 (numero negativo di valore 01110->01111(2)=-15(10)) + 11000 (numero negativo di valore: 00111->01000(2)=-8(10)) = 01001 (overflow nella somma binaria) 01000 Riporti -> OVERFLOW (ultimi rapporti diversi) 01001 (numero positivo di valore 9(10)) + 01000 (numero positivo di valore:8(10)) = 10001 (overflow nella somma binaria) www.stoianov.it 14 7