Rappresentazione dell'informazione Moreno Marzolla Dipartimento di Informatica—Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/
Rappresentazione dell'informazione Copyright © 2016, 2017, 2018 Moreno Marzolla, Università di Bologna, Italy http://www.moreno.marzolla.name/teaching/FINFA/ This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. Rappresentazione dell'informazione
Logica binaria
Rappresentazione dell'informazione I moderni calcolatori elettronici rappresentano ogni tipo di informazione mediante sequenze di bit In realtà devono gestire informazioni di tipo non necessariamente binario Numeri (interi, reali) Testi (sequenze di caratteri) Suoni, immagini, video Come rappresentiamo questi tipi di informazioni in un calcolatore elettronico? Rappresentazione dell'informazione
Rappresentazione di numeri non negativi Una sequenza di N bit può rappresentare un intero non negativo in base 2 Esempio: quanto vale 001101012? Risposta: 32 + 16 + 4 + 1 = 53 Si sommano i pesi corrispondenti alle cifre binarie “1” Con N bit possiamo rappresentare tutti gli interi appartenenti all'insieme {0, … 2N - 1} 128 64 32 16 8 4 2 1 pesi cifre binarie Rappresentazione dell'informazione
Conversione decimale→binario Si può procedere così Si divide il numero decimale ripetutamente per 2. I resti della divisione danno le cifre della rappresentazione binaria, a partire da quella meno significativa Es: come si scrive 7410 in binario? 74 / 2 = 37 resto 0 37 / 2 = 18 resto 1 18 / 2 = 9 resto 0 9 / 2 = 4 resto 1 4 / 2 = 2 resto 0 2 / 2 = 1 resto 0 1 / 2 = 0 resto 1 Cifra più a destra 10010102 Cifra più a sinistra Rappresentazione dell'informazione
Rappresentazione dell'informazione Somma binaria Quanto vale 010101012 + 100011002 ? A B C A + B + C C' 1 Riporto 0 0 1 1 1 0 0 0 1 0 1 0 1 0 12 + 1 0 0 0 1 1 0 02 = 1 1 1 0 0 0 0 12 Regola generale per calcolare (A + B + C) ottenendo la somma e il nuovo riporto C' Rappresentazione dell'informazione
Rappresentazione dell'informazione Sommatore a 1 bit E' possibile costruire un circuito (Full Adder) che accetta in input tre bit A, B e C (Carry, ossia “riporto”)... ...e calcola la somma S=A+B+C e il nuovo riporto C' A B ADD C' C S Rappresentazione dell'informazione
Rappresentazione dell'informazione Calcolare S e C' A partire dalla tabella di verità, possiamo derivare due espressioni booleane per S e C' come visto in precedenza Oppure possiamo ragionare come segue: S vale 1 sse tutti e tre gli input valgono 1, oppure esattamente uno di loro vale 1 C' vale 1 sse almeno due dei tre input valgono 1 Rappresentazione dell'informazione
Rappresentazione dell'informazione Calcolare S S vale 1 se tutti e tre gli input sono 1, oppure esattamente un input vale 1 Cioè: S ≡ (A AND B AND C) OR (A AND (NOT B) AND (NOT C) ) OR ((NOT A) AND B AND (NOT C) ) OR ((NOT A) AND (NOT B) AND C ) Oppure S ≡ (A AND B AND C) OR (A AND (B NOR C) ) OR (B AND (A NOR C) ) OR (C AND (A NOR B) ) Rappresentazione dell'informazione
Rappresentazione dell'informazione Calcolare C' C' vale 1 se almeno due input sono 1 Cioè C' ≡ ( A AND B ) OR ( A AND C ) OR ( B AND C ) Esercizio: Disegnare il circuito per calcolare S e C' partendo dalle espressioni booleane Rappresentazione dell'informazione
Rappresentazione dell'informazione Circuito sommatore Per sommare due numeri di N bit, possiamo utilizzare N Full Adder in cascata (Ripple-Carry Adder). Es. (N=4) A3A2A1A0 + B3B2B1B0 = S3S2S1S0 con riporto C A3 A2 A1 A0 B3 B2 B1 B0 ADD ADD ADD ADD C S3 S2 S1 S0 Esistono metodi più efficienti per propagare il riporto, che vedrete nel corso di Calcolatori Elettronici Rappresentazione dell'informazione
Rappresentazione dell'informazione ...e i numeri negativi? Come rappresentiamo numeri negativi, ad es -1? Si utilizza la rappresentazione in complemento a due Con N bit, il numero intero x viene codificato in binario allo stesso modo di 2N + x ignorando eventuali overflow Nota: 010 (decimale) in complemento a due si scrive 00...02C (una stringa di N zeri) Rappresentazione dell'informazione
Rappresentazione dell'informazione Esempio Supponiamo di avere N = 4 bit, e di voler codificare il numero x = 6 2N + x = 24 + 6 = 22 2210 in binario si scrive 101102 Abbiamo a disposizione solo 4 bit, quindi scartiamo quello più a sinistra: rimane 01102C La rappresentazione in complemento a 2 di 610 coincide con la normale rappresentazione binaria Questo vale per tutti i numeri positivi Rappresentazione dell'informazione
Rappresentazione dell'informazione Esempio Rappresentiamo x = -7 con N = 4 bit in compl. a due 2N + x = 24 – 7 = 9 910 in binario si scrive 10012 quindi -710 = 10012C Osservazione 1 Con N bit è possibile rappresentare in complemento a due i valori interi compresi tra -(2N-1) e 2N-1-1 (estremi inclusi) Con N = 8 bit [-128, 127] Con N = 16 bit [-32768, 32767] Con N = 32 bit [-2147483648, 2147483647] Osservazione 2 I numeri negativi (in complemento a due) hanno sempre il primo bit a sinistra 1; i numeri positivi hanno 0 Rappresentazione dell'informazione
Rappresentazione dell'informazione Alternativamente Un modo alternativo per codificare un numero negativo in complemento a due (es., -78): Si codifica il valore positivo 7810 = 0100 11102 Si inverte bit a bit il numero ottenuto 0100 11102 → 1011 00012 Si somma 1, scartando l'eventuale bit di riporto in eccesso 1011 00012 + 12 = 1011 00102C Ovviamente si deve ottenere lo stesso risultato del metodo precedente Con N=8 bit, -78 si codifica come 28 – 78 = 178 → 1011 00102C Rappresentazione dell'informazione
Valori rappresentabili Data una stringa di N bit, quanti (e quali) numeri si possono rappresentare in complemento a due? Es: N = 4 Rappresentazione dell'informazione
Conversione complemento a 2 → decimale Si procede come per la conversione binario → decimale, con la differenza che il peso del bit più significativo (quello a sinistra) è -2N-1 anziché 2N-1 Esempio: quanto vale 101101012C ? Risposta: -128 + 32 + 16 + 4 + 1 = -75 -128 64 32 16 8 4 2 1 pesi cifre binarie Rappresentazione dell'informazione
Somma in complemento a due Si usano le stesse regole della somma binaria "normale" Calcolare 510 – 710 in compl. a due con N = 4 bit 510 = 01012C -7 si rappresenta come 24 - 7 = 16 - 7 = 910 = 10012C Sommando 01012C + 10012C si ottiene 11102C Il primo bit a sinistra vale uno, quindi è un valore negativo Infatti 11102C = -8 + 4 + 2 = -2 Rappresentazione dell'informazione
Rappresentazione dell'informazione Esercizio per casa Determinare la rappresentazione in complemento a due con N = 4 bit dei numeri A = -310 e B = -510 Calcolare la somma (A + B) sommando le rappresentazioni in complemento a due di A e B ottenute al punto precedente La somma così calcolata corrisponde al valore corretto A + B = -8 ? A = -3 corrisponde a 11012 in compl. a due B = -5 corrisponde a 10112 in compl. a due Ricordiamo che con N=4 bit possiamo rappresentare gli interi nell'insieme {-8, ... 7} Rappresentazione dell'informazione
Rappresentazione dell'informazione Errore di overflow Se x e y sono due numero con segno diverso in complemento a due con N bit Il valore (x + y) sarà ancora rappresentabile con N bit in complemento a due Infatti: supponiamo che x sia positivo e y negativo 0 ≤ x ≤ 2N-1-1 -2N-1 ≤ y ≤ 0 da cui (sommando membro a membro): -2N-1 ≤ x + y ≤ 2N-1-1 Dunque x + y appartiene all'insieme dei valori rappresentabili in complemento a due con N bit Rappresentazione dell'informazione
Rappresentazione dell'informazione Errore di overflow Se x e y hanno lo stesso segno, può verificarsi overflow. Esempio con N = 4 bit valori rappresentabili in complemento a due: -8 ... +7 (-2)10 + (-8)10 310 + 610 Riporto 1 0 0 0 1 1 1 02C + 1 0 0 02C = 1 0 1 1 02C Riporto 0 1 1 0 0 0 1 12C + 0 1 1 02C = 1 0 0 12C -2 -8 = 6 ?!?!? 3 + 6 = -7 ?!?!? Rappresentazione dell'informazione
Rappresentazione dell'informazione Errore di overflow Si verifica overflow quando entrambe le condizioni seguenti sono vere Gli operandi hanno lo stesso segno Il segno della somma è diverso da quello degli operandi Esercizio Costruire un circuito booleano che accetta tre input binari (A=segno del primo operando, B=segno del secondo operando, C=segno della somma in complemento a due, 0 indica positivo, 1 indica negativo), e produce come risultato R=1 se e solo se si è verificato overflow Overflow A B R Rappresentazione dell'informazione C
Circuito sommatore con controllo di overflow B3 B2 B1 B0 Overflow ADD ADD ADD ADD C S3 S2 S1 S0 Rappresentazione dell'informazione
Codifica di numeri reali Come rappresentiamo un numero reale (“con la virgola”), come ad es. 34,76510? Usiamo la notazione scientifica normalizzata: 34,765 = 3,4765 × 101 0,007653 = 7,653 × 10-3 Osserviamo che 3,4765 = 3×10-0 + 4×10-1 + 7×10-2 + 6×10-3 + 5×10-4 Rappresentazione dell'informazione
Codifica dei numeri reali Lo stesso si può applicare anche per la base 2 1,1012 = 1´20 + 1´2-1 + 0´2-2 + 1´2-3 = 1,812510 Possiamo scrivere un numero reale diverso da zero in base 2 come Dove: mmm.. sono le cifre della parte frazionaria della mantissa eee... rappresenta l'esponente Non si usa la rappresentazione in complemento a due, bensì la notazione “con bias”, vedi lucido seguente ±1,𝑚𝑚𝑚...× 2 𝑒𝑒𝑒... Rappresentazione dell'informazione
Codifica dei numeri reali Solitamente si usa un numero fisso di cifre per la mantissa e per l'esponente Es: standard IEEE 754 singola precisione: 32 bit totali così suddivisi 1 bit 8 bit 23 bit s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm esponente si converte in intero senza segno e si sottrae 127 segno 0 = positivo 1 = negativo mantissa normalizzata dopo la virgola (prima della virgola si assume 1) Rappresentazione dell'informazione
Rappresentazione dell'informazione Attenzione Nello standard IEEE 754 l'esponente NON si rappresenta in complemento a due Si interpreta in binario senza segno, e si sottrae 127 Il valore 0 viene rappresentato ponendo tutti i bit della mantissa e dell'esponente a zero Si ha uno "zero positivo" e "zero negativo"! 0000 0000 000 0000 0000 0000 0000 0000 Zero “positivo” 1 0000 0000 000 0000 0000 0000 0000 0000 Zero “negativo” Rappresentazione dell'informazione
Rappresentazione dell'informazione Esempio 1 0111 1100 101 1000 0000 0000 0000 0000 Mantissa: 1,10112 = 1.687510 Esponente: 0111 11002 = 124 10 12410 – 12710 = -310 Segno: - Valore: -1.6875 ´ 2-3 = -0.210937510 Rappresentazione dell'informazione
Rappresentazione dell'informazione Riepilogo Rappresentazione in base 2 Interi positivi Interi positivi e negativi (complemento a due) Valori reali Che dire di altri tipi di informazione? Caratteri alfanumerici Suoni Immagini ... Le istruzioni eseguite dalla CPU Rappresentazione dell'informazione
Codifica dei caratteri Quanti simboli dobbiamo rappresentare? 26 lettere minuscole 26 lettere maiuscole 10 numeri (0—9) simboli vari (%, $, “...) alcuni caratteri di controllo (Return, Canc, Insert...) La codifica ASCII usa 7 bit per codificare 27 = 128 caratteri diversi Dato che i calcolatori moderni lavorano con Byte di 8 bit, si usa la codifica ASCII estesa (extended ASCII) che usa 8 bit per carattere La codifica UNICODE usa 8, 16 o 32 bit Con 32 bit si possono identificare 232 = 4 294 967 296 simboli diversi Rappresentazione dell'informazione
Rappresentazione dell'informazione ASCII = American Standard Code for Information Interchange "ASCII-Table-wide" by ASCII-Table.svg: ZZT32derivative work: LanoxxthShaddow - ASCII-Table.svg. Licensed under Public Domain via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:ASCII-Table-wide.svg#/media/File:ASCII-Table-wide.svg Rappresentazione dell'informazione
Rappresentazione dell'informazione Codifica di immagini Le immagini non sono formate da “sequenze” di oggetti ben definiti come i numeri e i testi Per poterle rappresentare bisogna prima “discretizzarle” Cioè trasformarle in un insieme di parti “discrete” che possono essere codificate con sequenze di bit Consideriamo prima immagini fisse (foto etc …) Rappresentazione dell'informazione
Rappresentazione dell'informazione Immagini vettoriali L'immagine è descritta mediante primitive geometriche (linee, cerchi, poligoni...) di cui si specificano i parametri By Tonchino - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=23776193 Rappresentazione dell'informazione
Rappresentazione dell'informazione Immagini bitmap L’immagina viene scomposta in una griglia di elementi detti pixel (da picture element) Immagine originale Rappresentazione bitmap Rappresentazione dell'informazione
Rappresentazione dell'informazione Immagini bitmap Ciascun pixel di una immagine in bianco e nero può essere rappresentato da un singolo bit Ad es., 0 = bianco, 1 = nero 0000000000000000 0000011111000000 0000100000100000 0001001010010000 0001000000010000 0001010001010000 0001001110010000 00000000 00000000 00000111 11000000 00001000 00100000 00010010 10010000 00010000 00010000 00010100 01010000 00010011 10010000 Rappresentazione dell'informazione
Rappresentazione dell'informazione Immagini bitmap Immagini a toni di grigio Un byte per pixel (0=bianco, 255=nero, gli altri valori rappresentano toni intermedi di grigio) Immagini a colori: più bit (es., 3 Byte) per pixel 1 Byte per la componente Rossa (0—255) 1 Byte per la componente Verde (0—255) 1 Byte per la componente Blu (0—255) 10 24 191 Rappresentazione dell'informazione
Immagini bitmap vs vettoriali Le immagini vettoriali possono essere ingrandite a piacere senza perdita di dettaglio I formati vettoriali sono adatti a disegni tecnici, ma non si prestano alla rappresentazione di immagini reali (es., un volto, un paesaggio) By The original uploader was Darth Stabro at English Wikipedia - Transferred from en.wikipedia to Commons by Pbroks13 using CommonsHelper., CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=15789788 Rappresentazione dell'informazione
Rappresentazione dell'informazione Codifica di immagini La rappresentazione accurata di una immagine bitmap dipende dal numero di pixel (definizione, o risoluzione) dalla codifica del pixel …e richiede generalmente molta memoria Risoluzione N. colori Byte Immagine Televisiva 720 ´ 625 256 (8 bpp) 440 KB Telev. 4K 3840 ´ 2160 4096 (12 bpp) ~ 12 MB Foto 15000 ´ 10000 16 milioni (24 bpp) ~ 430 MB bpp = bit per pixel Rappresentazione dell'informazione
Rappresentazione dell'informazione Esercizio Una immagine ha una risoluzione di 1800 ´ 1200 pixel; ogni pixel può avere un colore scelto tra 65536 colori possibili Quanti Byte sono necessari per codificare l'immagine? Ipotizzare che il colore di un pixel sia rappresentato con il minimo numero di bit necessari per rappresentare univocamente un intero tra 0 e 65535 Trascurare lo spazio necessario per memorizzare la “tavolozza dei colori” Per codificare 65536 valori diversi sono necessari 16 bit = 2 Byte. Quindi lo spazio richiesto è 1800 x 1200 x 2 = 4399200 B = circa 4 Megabyte Per codificare 65536 valori diversi sono necessari 16 bit = 2 Byte. Quindi lo spazio richiesto è 1800 x 1200 x 2 = Rappresentazione dell'informazione
Algoritmi di compressione Per “risparmiare” memoria si impiegano tecniche di compressione Alcuni formati comunemente usati JPEG (immagini) MP3, FLAC (audio) MP4, H.263 (video) ZIP, RAR, BZ2 (file generici) Rappresentazione dell'informazione
Algoritmi di compressione Algoritmi lossless (senza perdita di informazione): Operano un cambiamento di codifica dei dati che permette di diminuire il numero di bit necessari alla rappresentazione Consentono di ricostruire esattamente la sequenza di dati originali a partire dai dati compressi Esempio: sequenza di 1 milione di caratteri, A=00, B=01, C=10, D=11, totale 2 milioni di bit per la codifica se A compare il 90% delle volte posso ‘comprimere’ la codifica nel seguente modo A=0, B=100, C=110, D=111 ottenendo una lunghezza di : 900 000 ´ 1 + 100 000 ´ 3 = 1 200 000 bit Rappresentazione dell'informazione
Algoritmi di compressione Algoritmi lossy (con perdita di informazione) Sfruttano le caratteristiche degli oggetti da rappresentare per scartare informazione “poco importanti“ Possono ottenere livelli di compressione elevati, ma non consentono di ricostruire esattamente i dati originali a partire da quelli compressi Alcune informazioni sono eliminate dal processo di compressione L'algoritmo JPEG sfrutta la caratteristica dell’occhio umano di essere poco sensibile a lievi cambiamenti di colore in punti contigui, e quindi elimina questi lievi cambiamenti “appiattendo” il colore dell’immagine E' possibile specificare mediante alcuni parametri quanto siamo disposti a perdere in qualità nel processo di compressione Rappresentazione dell'informazione
Rappresentazione dell'informazione Gli artefatti prodotti dalla compressione JPEG sono visibili ingrandendo l'immagine sotto forma di “blocchi” Rappresentazione dell'informazione
Rappresentazione dell'informazione Codifica di video Il movimento è simulato mostrando immagini fisse in sequenza (24-30 al secondo) che l’occhio umano percepisce come un continuo Per risparmiare spazio alcuni metodi di codifica memorizzano solo le “differenze” fra un fotogramma e l’altro http://nickyguides.digital-digest.com/keyframes.htm Rappresentazione dell'informazione
Rappresentazione dell'informazione Codifica di suoni Un generico suono (o segnale analogico) è rappresentato da un'onda continua Tempo Rappresentazione dell'informazione
Codifica dei suoni Campionamento Il segnale viene misurato ad istanti discreti Es: 1KHz = 1000 campioni/sec = 1 campione/msec Tempo Rappresentazione dell'informazione
Codifica dei suoni Quantizzazione Per ogni campione, il valore assunto dal segnale viene espresso con un numero finito di bit (quantizzazione) Segnale campionato e quantizzato Segnale originale Tempo Rappresentazione dell'informazione
Rappresentazione dell'informazione Codifica dei suoni L’accuratezza della ricostruzione dipende: da quanto sono piccoli gli intervalli di campionamento (intervalli più piccoli → qualità migliore) da quanti bit vengono utilizzati per descrivere il suono in ogni campione (più bit → qualità migliore) Gli algoritmi lossy di compressione audio sfruttano il fatto che per l’orecchio umano suoni a basso volume sovrapposti ad altri di volume maggiore sono poco udibili e possono essere eliminati E' quello che accade nello standard MPEG Layer 3 (MP3) Rappresentazione dell'informazione
Rappresentazione dell'informazione Idee chiave Rappresentazione binaria di interi Complemento a due Rappresentazione di informazione non numerica Compressione lossless e lossy Campionamento e discretizzazione Rappresentazione dell'informazione
Logica binaria