TEST: differenze tra le versioni

Da Bioingegneria Elettronica e Informatica.
(Creata pagina con "<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 14 (filtered)"><title>Microsoft Word - La codi...")
(Nessuna differenza)

Versione delle 12:09, 1 ott 2016

<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 14 (filtered)"><title>Microsoft Word - La codifica binaria dell'informazione_revisione2012.doc</title><style></style></head><body lang=IT>

'La codifica binaria della informazione' <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt;

margin-left:151.25pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:107%'>Vitoantonio Bevilacqua  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.1pt; margin-left:202.6pt'>  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:25.0pt; margin-left:155.45pt'>bevilacqua@poliba.it <p class=MsoNormal style='margin-top:0cm;margin-right:93.6pt;margin-bottom: 10.55pt;margin-left:35.8pt;text-indent:-1.0pt;line-height:104%'>Sommario. Il presente paragrafo si riferisce alle prime due lezioni del corso di Fondamenti di Informatica e Laboratorio di Informatica.    <p class=MsoNormal style='margin-top:0cm;margin-right:93.6pt;margin-bottom: 35.9pt;margin-left:35.8pt;text-indent:-1.0pt;line-height:104%'>Parole chiave: Codifica Binaria, Memoria RAM, Complemento a 2, IEEE

754   a singola e doppia precisione.  

1   Introduzione 

<p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:28.7pt;

margin-left:8.3pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Il fine principale degli argomenti trattati in queste iniziali lezioni consiste nell'illustrare in quale maniera l'informazione, per adesso soltanto numerica, viene memorizzata nella memoria RAM (Random Access Memory) di un sistema di calcolo rispettando standard condivisi, per poi essere elaborata attraverso un linguaggio di programmazione. In particolare si tratteranno: la codifica binaria, la codifica esadecimale, le conversioni di base, il concetto di errore di una codifica, la codifica di numeri interi con e senza segno in CA2 (complemento a 2), la codifica di numeri reali in singola e doppia precisione secondo lo standard IEEE 754, gli effetti sulla dichiarazione delle variabili signed e unsigned di tipo char ed int, e

delle variabili float e double in linguaggio C. 

2   La memoria di lavoro 

<p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt;

margin-left:7.85pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>La memoria RAM (Random Access Memory) è la memoria di lavoro (elaborazione) di un sistema di calcolo; per semplicità essa può essere rappresentata come una tabella organizzata in righe, ciascuna delle quali (per ora chiamata word) viene suddivisa in 4 colonne o blocchi, da ora in poi chiamati byte, costituiti da una sequenza di 8 bit (binary digit) ovvero 8 cifre che possono assumere soltanto valori 0 o 1.   <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:1.8pt; margin-left:7.85pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>In generale, ogni programma di elaborazione si occupa della gestione delle informazioni per unità elementari corrispondenti alla dimensione dei byte, senza necessariamente scendere al livello di dettaglio dei singoli bit, per questo motivo si dice che la unità minima indirizzabile (ovvero dotata di un indirizzo in memoria corrispondente alla posizione in memoria RAM) è il singolo byte. Il modo più diffuso di numerare i byte, iniziando sempre dal numero progressi 0, è da destra verso a sinistra (“little Endian”), laddove il verso dall’alto verso il basso è ovviamente relativo a

come più avanti si dirà essere partizionata la intera memoria RAM. 

3   Le regole per le trasformazioni di base 

<p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt;

margin-left:7.85pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Dato un numero, le basi del sistema di numerazione che si usano per leggere tale numero sono la base 2 (binaria), 8 (ottale), 16 (esadecimale); assegnata una base del sistema di numerazione, le cifre sono date da 0 fino a numero base – 1. Dopo la cifra 9, si aggiungono A, B, C, D, E, F per formare la base di un sistema esadecimale.  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.1pt; margin-left:7.8pt'>  <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:1.4pt; margin-left:8.3pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Assegnato un numero codificato in base 2, si decodifica facilmente in base 10; esempio della codifica chiamata “in binario puro”:  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:7.8pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:5.7pt; margin-left:7.85pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>(1010.101)2 = (1 x 23+ 0 x 22+1 x 21+ 0 x 20 + 1 x·2-1+ 0 x 2-2 + 1 x·2-3)10=(10.625)10<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:3.95pt; margin-left:7.8pt'>  <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:8.3pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Codifica binaria di un numero: per l’operazione inversa, si utilizzano due algoritmi rispettivamente per la parte intera e decimale del numero:  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm;

margin-left:1.45pt;margin-bottom:.0001pt'> 

3.1   Algoritmo di Horner - divisioni successive  

<p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt;

margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Si prende il numero intero, si mette in colonna a sinistra, lo si divide per 2, riportando quoziente sotto il dividendo mentre il resto accanto al dividendo, e così via fino a raggiungere il quoziente 0. La parte intera del numero in binario è la sequenza dei resti, presa dal basso verso l’alto. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm;

margin-left:18.75pt;margin-bottom:.0001pt'> 

3.2   Algoritmo di Horner - moltiplicazioni successive  

<p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt;

margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Si prende il numero decimale, si mette in colonna a sinistra, lo si moltiplica per 2, riportando:  <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:58.1pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>1.     Se il prodotto è ≥1, accanto al primo fattore 1 e sotto il complemento del prodotto <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:58.1pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>2.     Se il prodotto è <1, accanto al primo fattore lo 0 e sotto il prodotto  <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Cosi via, fino a raggiungere il prodotto 0. La sequenza da prendere come parte decimale del numero in binario è la sequenza di destra presa dall’alto verso il basso. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.15pt; margin-left:.7pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.5pt; margin-left:.7pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:74.95pt;margin-bottom: .25pt;margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:107%'><img width=104 height=394 src="1%20Prima%20Dispensa%20-La%20codifica%20binaria%20dell%20informazione_revisione2015_file/image001.gif" align=left hspace=12>Mentre nell’algoritmo delle divisioni lo 0 si raggiunge sempre, nell’algoritmo delle moltiplicazioni non è sempre possibile raggiungerlo e ciò dipende dal concetto di periodo della base; il periodo si ripete dal momento in cui si trova un numero già trovato in precedenza. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Esempio:  <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Codifica in binario e ricodifica in decimale del numero 127.4   <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:1.85pt; margin-left:99.3pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>(127.4)10 = (1111111.0110)2 = (127.375)10  <p class=MsoNormal style='margin-top:0cm;margin-right:124.9pt;margin-bottom: .25pt;margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:107%'>Nel momento in cui si accetta un periodo, si commette un “errore di codifica”.  Si definisce: <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:0cm; margin-left:37.45pt;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph; text-indent:-18.0pt;line-height:112%'>       Errore assoluto 𝑒𝑎lo scarto tra il numero iniziale da codificare e il numero ottenuto dopo la ricodifica nella stessa base di partenza. Esempio: 𝑒𝑎= 127.4 – 127.375 = 0.025 <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:37.45pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>       Errore relativo<img width=50 height=20 id="Picture 10409" src="1%20Prima%20Dispensa%20-La%20codifica%20binaria%20dell%20informazione_revisione2015_file/image002.gif">dove num è il numero iniziale rispetto al quale si è commesso l’errore di codifica <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:37.95pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Esempio: <img width=53 height=21 id="Picture 10410" src="1%20Prima%20Dispensa%20-La%20codifica%20binaria%20dell%20informazione_revisione2015_file/image003.gif"> <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:37.45pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>       Errore relativo percentuale 𝑒𝑟% = 𝑒𝑟 ∗ 100<p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Concetto di range (intervallo di rappresentazione di un numero): preso un byte, supponendo che, avendo a disposizione n bit, tutti gli n codificano numeri interi in base binaria, il range di rappresentazione varia tra <p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:1.15pt;margin-left:2.55pt;text-align:center'>[0, 2𝑛 − 1]. <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>La formula deriva dal numero di combinazioni diverse che si possono ottenere <p class=MsoNormal style='margin-top:0cm;margin-right:176.75pt;margin-bottom: 1.9pt;margin-left:1.15pt;text-align:justify;text-justify:inter-ideograph; text-indent:221.1pt;line-height:107%'>2𝑛 = 256 Tenendo conto che si inizia la numerazione da 0. <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Essendo 8 i bit: [0, 255] <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.25pt; margin-left:.7pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:18.5pt;margin-bottom: .25pt;margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:107%'>Codifica esadecimale di un numero: è necessaria per minimizzare il codice; per eseguirla si possono utilizzare due metodi:  <p class=MsoNormal style='margin-top:0cm;margin-right:58.85pt;margin-bottom: .25pt;margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph; text-indent:-18.0pt;line-height:107%'>1.     Gli algoritmi da usare sono sempre gli algoritmi di Horner, con le opportune modifiche (in colonna si moltiplica e divide per 16). Infatti i due algoritmi sono generici, nel senso che, non dipendono dalla base in cui è rappresentato un numero. <p class=MsoNormal style='margin-top:0cm;margin-right:58.85pt;margin-bottom: .25pt;margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph; text-indent:-18.0pt;line-height:107%'>2.     Si codifica in binario il numero, quindi, essendo 24 = 16 si raccolgono le cifre a 4 a 4, a partire dalla virgola e si decodifica da base binaria a base decimale ciascuno dei blocchi Esempio: <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Codifica in esadecimale di 65.25: (65.25)10 = (1000001.01)2<p class=MsoNormal style='margin-bottom:.25pt;line-height:107%'>0100     0001     .0100 <p class=MsoNormal style='margin-bottom:.25pt;line-height:107%'>4           1          .4 <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Dunque (65.25)10 = (41.4)16  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.1pt;

margin-left:.7pt'> 

3.3 Rappresentazione con modulo e segno (“signed magnitude” o M&S) 

<p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:3.55pt;

margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Per rappresentare un numero con segno, si usa, per convenzione:  <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>       Un bit per il segno: 0 per + (più), 1 per – (meno) <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:.25pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>       N-1 bit per il modulo  <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:2.75pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Il bit che codifica il segno è definito MSB (Most Significant Bit, il primo bit, il più significativo). <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:5.15pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:107%'>Esempio: n = 8, range [-127,+127] <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.15pt; margin-left:.95pt;text-indent:-.5pt'>(−11)10 = (0011011)2  <p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:0cm;margin-left:3.35pt;margin-bottom:.0001pt;text-align:center'><img width=189 height=35 id="Picture 721" src="1%20Prima%20Dispensa%20-La%20codifica%20binaria%20dell%20informazione_revisione2015_file/image004.jpg"> <p class=MsoNormal style='margin-top:0cm;margin-right:77.0pt;margin-bottom: .25pt;margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:107%'>In questo caso le combinazioni si riducono a 255 causa la doppia rappresentazione dello 0: 10000000 = 00000000 = 0 e il range è: [-(2n-1-1),2n-1-1] = [-127,127].  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.7pt; margin-left:.7pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:78.65pt;margin-bottom: .25pt;margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:142%'>3.4 L’operazione di complemento a uno. (CA1)  E’ un’operazione molto semplice per un sistema di calcolo ed è alla base dell’operazione di complemento a due grazie alla quale è possibile rappresentare numeri interi negativi e positivi. <p class=MsoNormal style='margin-top:0cm;margin-right:78.85pt;margin-bottom: .1pt;margin-left:0cm;line-height:101%'>Per trovare la rappresentazione in complemento a uno si invertono semplicemente tutti i bit della parola. <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt'> 

3.5 La codifica in complemento a due per i numeri con segno (CA2) 

<p class=MsoNormal style='margin-top:0cm;margin-right:78.5pt;margin-bottom:

.5pt;margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:104%'>Il complemento a due è il metodo più diffuso per la rappresentazione dei numeri con segno. Il valore da utilizzare relativamente al MSB risulta essere il suo opposto (questo implica che se vale 0 porta a una decodifica di valore uguale alla rappresentazione in binario puro):  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:1.45pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>00000000=0  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.95pt; margin-left:36.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>00000001=1  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>…  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:4.1pt; margin-left:36.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>01111111=+127  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>10000000=-127=-128  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.9pt; margin-left:36.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>10000001=-128+1=-127  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>…  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>11111111=-1  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:1.45pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:1.0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Le combinazioni sono 256 per la rappresentazione univoca dello 0: ovvero soltanto 00000000 = 0; in questo caso il range varia tra [-(2n-1),2n-1-1] = [-128,127].  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:12.15pt;margin-bottom:.0001pt'>  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.55pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Per codificare un numero in complemento a due:  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:18.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: 18.0pt;line-height:104%'>1.                  Si sceglie il range per il quale è possibile codificare il numero e di conseguenza i bit necessari <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:18.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: 18.0pt;line-height:104%'>2.                  Si rappresenta il valore assoluto del numero in binario <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:18.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: 18.0pt;line-height:104%'>3.                  Si applica l’operazione di complemento a 1 e si somma 1 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.15pt; margin-left:18.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: 18.0pt;line-height:104%'>4.                  La sequenza ottenuta è la codifica del numero iniziale in complemento a due Esempio: <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.3pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Si vuole codifica in complemento a 2 il numero -65 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:3.65pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Il range varia tra [-128,127] <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.35pt; margin-left:.95pt;text-indent:-.5pt'>28 𝑐𝑜𝑚𝑏𝑖𝑛𝑎𝑧𝑖𝑜𝑛𝑖<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:4.05pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>8 bit necessari <p class=MsoNormal style='margin-top:0cm;margin-right:270.0pt;margin-bottom: .5pt;margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:133%'>Il valore assoluto è: (65)10 = (01000001)2 Faccio il complemento a 1: 10111110 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.3pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Il complemento a 2 è: 10111110 + 1 = 10111111 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm;

margin-left:.7pt;margin-bottom:.0001pt'> 

4   Lo standard IEEE 754 

<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm;

margin-left:.7pt;margin-bottom:.0001pt'>Standard IEEE 754 single precision<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Rappresentazione di un numero reale in 32 bit. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>I 32 bit vengono suddivisi in 3 gruppi: <p class=MsoNormal style='margin-bottom:.5pt;line-height:104%'>±              esponente             mantissa <p class=MsoNormal style='margin-bottom:.5pt;line-height:104%'>1              8                             23 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Il modulo del numero viene codificato in base binaria usando gli algoritmi di divisione e moltiplicazione successive evidenziando, nella parte decimale, un periodo ove ci fosse. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>La rappresentazione binaria risultante è detta “fixed point” (a virgola fissa). <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Si passa alla rappresentazione “floating point” (a virgola mobile) per determinare mantissa ed esponente.  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Si sposta la virgola fino alla sinistra dell’ultima cifra diversa da zero, cambiando anche l’esponente per riequilibrare l’ordine di grandezza. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>La parte dopo la virgola indica la mantissa matematica. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Se si sposta la virgola alla destra dell’ultima cifra diversa da zero, cambiando anche l’esponente: <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       La parte del numero dopo la virgola indica la mantissa normalizzata che, se composta da un numero di cifre < 23, ai restanti bit si assegna valore 0 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       Per codificare l’esponente, si usa la rappresentazione per eccesso: si somma l’esponente al bias (2𝑛−1 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.15pt; margin-left:37.25pt;text-indent:-.5pt'>1, 𝑑𝑜𝑣𝑒 𝑛 è 𝑖𝑙 𝑛𝑢𝑚𝑒𝑟𝑜 𝑑𝑖 𝑏𝑖𝑡 𝑟𝑖𝑠𝑒𝑟𝑣𝑎𝑡𝑖 𝑎𝑙𝑙′𝑒𝑠𝑝𝑜𝑛𝑒𝑛𝑡𝑒) e quindi si codifica il numero <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Esempio: <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.3pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Si vuole codificare secondo lo standard IEEE754 a single precision, il numero -118.625 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       Codifico la parte intera: (118)10 = (1110110)2     Codifico la parte decimale: (0.625)10 = (.101)2<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       La rappresentazione in fixed point è: 1110110.101 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       Sposto la virgola fino alla sinistra dell’ultima cifra diversa da 0 e riequilibrio l’ordine di grandezza: <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.8pt; margin-left:37.25pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>0.1110110101*27<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       La mantissa matematica è: 1110110101 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       Sposto la virgola fino alla destra dell’ultima cifra diversa da zero e riequilibrio l’ordine di grandezza: <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.95pt; margin-left:37.25pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>1.110110101*26<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       La mantissa normalizzata è: 110110101 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.15pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt'>       Codifico l’esponente: 6 + 27 − 1 = 6 + 127 = 5 + 128 = 10000101<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       La          rappresentazione                secondo                lo            standard               IEEE754               a             single      precision                è:  <p class=MsoNormal style='margin-bottom:.5pt;line-height:104%'>                1             1000101              11011010100000000000000 <p class=MsoNormal style='margin-bottom:.5pt;line-height:104%'>                ±             esponente             mantissa <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>L’ordine di precisione delo standard IEEE754 è dato dal numero di cifre della mantissa. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Per ottenere una rappresentazione più precisa si usa lo standard IEEE754 a double precision (64 bit) <p class=MsoNormal style='margin-bottom:.5pt;line-height:104%'>±              esponente             mantissa <p class=MsoNormal style='margin-bottom:.5pt;line-height:104%'>1              11                           52 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Il metodo di rappresentazione è simile a quello usato per lo standard a single precision, l’unica cosa che varia è il bias: <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:13.3pt; margin-left:.95pt;text-indent:-.5pt'>211−1 − 1 = 1023<p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:14.15pt; margin-left:1.65pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:147%'>I valori assunti dall'esponente e dalla<a href="https://it.wikipedia.org/wiki/Mantissa"></a><a href="https://it.wikipedia.org/wiki/Mantissa">mantissa</a><a href="https://it.wikipedia.org/wiki/Mantissa"></a>determinano l'appartenenza del numero ad una di queste categorie: <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:4.2pt; margin-left:19.15pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>       Zeri; <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:4.2pt; margin-left:19.15pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>       Numeri in forma normale; <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:4.35pt; margin-left:19.15pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>       Numeri in forma<a href="https://it.wikipedia.org/wiki/Numeri_denormalizzati"></a><a href="https://it.wikipedia.org/wiki/Numeri_denormalizzati">denormalizzata</a><a href="https://it.wikipedia.org/wiki/Numeri_denormalizzati">;</a><p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:4.1pt; margin-left:19.15pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:107%'>       Infiniti; <p class=MsoNormal style='margin-top:0cm;margin-right:4.8pt;margin-bottom:16.85pt; margin-left:19.15pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt'>       NaN (not a number). <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:10.45pt; margin-left:.7pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> 

  1. F2F2F2;padding:0cm 5.75pt 13.85pt 4.8pt;height:45.45pt'><p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm;
margin-bottom:0cm;margin-left:.8pt;margin-bottom:.0001pt;text-align:center; line-height:normal'>Categoria <td width=73 style='width:54.4pt;border:solid #AAAAAA 1.0pt;border-left:none; background:#F2F2F2;padding:0cm 5.75pt 13.85pt 4.8pt;height:45.45pt'><p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:0cm;margin-left:.75pt;margin-bottom:.0001pt;text-align:center; line-height:normal'>Esp. <td width=116 style='width:87.05pt;border:solid #AAAAAA 1.0pt;border-left: none;background:#F2F2F2;padding:0cm 5.75pt 13.85pt 4.8pt;height:45.45pt'><p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:0cm;margin-left:.8pt;margin-bottom:.0001pt;text-align:center; line-height:normal'>Mantissa border-top:none;background:#F2F2F2;padding:0cm 5.75pt 13.85pt 4.8pt; height:46.3pt'><p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:0cm;margin-left:.65pt;margin-bottom:.0001pt;text-align:center; line-height:normal'>Zeri <td width=73 valign=bottom style='width:54.4pt;border-top:none;border-left: none;border-bottom:solid #AAAAAA 1.0pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:46.3pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>0 <td width=116 valign=bottom style='width:87.05pt;border-top:none;border-left: none;border-bottom:solid #AAAAAA 1.0pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:46.3pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>0 border-top:none;background:#F2F2F2;padding:0cm 5.75pt 13.85pt 4.8pt; height:46.3pt'><p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:0cm;margin-left:.65pt;margin-bottom:.0001pt;text-align:center; line-height:normal'>Numeri denormalizzati <td width=73 valign=bottom style='width:54.4pt;border-top:none;border-left: none;border-bottom:solid #AAAAAA 1.0pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:46.3pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>0 <td width=116 valign=bottom style='width:87.05pt;border-top:none;border-left: none;border-bottom:solid #AAAAAA 1.0pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:46.3pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>non zero border-top:none;background:#F2F2F2;padding:0cm 5.75pt 13.85pt 4.8pt; height:46.35pt'><p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:0cm;margin-left:.65pt;margin-bottom:.0001pt;text-align:center; line-height:normal'>Numeri normalizzati <td width=73 valign=bottom style='width:54.4pt;border-top:none;border-left: none;border-bottom:double #F9F9F9 6.75pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:46.35pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>1-254 <td width=116 valign=bottom style='width:87.05pt;border-top:none;border-left: none;border-bottom:double #F9F9F9 6.75pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:46.35pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>qualunque border-top:none;background:#F2F2F2;padding:0cm 5.75pt 13.85pt 4.8pt; height:46.45pt'><p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:0cm;margin-left:.9pt;margin-bottom:.0001pt;text-align:center; line-height:normal'>Infiniti <td width=73 valign=bottom style='width:54.4pt;border-top:none;border-left: none;border-bottom:solid #AAAAAA 1.0pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:46.45pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>255 <td width=116 valign=bottom style='width:87.05pt;border-top:none;border-left: none;border-bottom:solid #AAAAAA 1.0pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:46.45pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>0 border-top:none;background:#F2F2F2;padding:0cm 5.75pt 13.85pt 4.8pt; height:45.35pt'><p class=MsoNormal align=center style='margin-top:0cm;margin-right:0cm; margin-bottom:0cm;margin-left:.6pt;margin-bottom:.0001pt;text-align:center; line-height:normal'>Nan (not a number) <td width=73 valign=bottom style='width:54.4pt;border-top:none;border-left: none;border-bottom:solid #AAAAAA 1.0pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:45.35pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>255 <td width=116 valign=bottom style='width:87.05pt;border-top:none;border-left: none;border-bottom:solid #AAAAAA 1.0pt;border-right:solid #AAAAAA 1.0pt; background:#F9F9F9;padding:0cm 5.75pt 13.85pt 4.8pt;height:45.35pt'><p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal'>non zero
<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm;

margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.8pt;

margin-left:.7pt'> 

5   Verso il linguaggio C 

<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.85pt;

margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Per specificare il tipo di variabile (tipo di rappresentazione usata per la codifica della variabile) esistono istruzioni dette <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:4.15pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>“specificatori di tipo”:  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       “char a”: carattere = variabile a memorizzata in 1 byte, codificata secondo C.A.2  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       “int b”: intero = variabile b memorizzata in 2 o 4 byte (4 in VisualC++ 6.0), codificata secondo C.A.2              “float c”: single = variabile c memorizzata in 4 byte, codificata secondo IEEE754 single p.  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:36.75pt;text-align:justify;text-justify:inter-ideograph;text-indent: -18.0pt;line-height:104%'>       “double d”: double = variabile d memorizzata in 8 byte, codificata secondo IEEE754 double p.  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:2.0pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Non indicando niente davanti agli specificatori di tipo, si sottintende “signed”. Per specificare che la variabile è senza segno, si scrive “unsigned” davanti agli specificatori di tipo e la codifica avverrà senza segno.  <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Per dimensionare una variabile, esistono gli specificatori “short” e “long” da scrivere davanti agli specificatori di tipo per, rispettivamente, dimezzare o raddoppiare il numero di byte necessari alla rappresentazione.  <p class=MsoNormal style='margin-top:0cm;margin-right:10.2pt;margin-bottom: 2.25pt;margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:104%'>Per assegnare ad una variabile a il valore n si utilizza l’assegnazione “ a = n ; ” e, a seconda del tipo specificato di variabile, il calcolatore memorizzerà il valore n nel primo pacchetto libero di byte in modo che il primo byte sia multiplo di 4.  <p class=MsoNormal style='margin-top:0cm;margin-right:144.8pt;margin-bottom: .5pt;margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph; text-indent:-.5pt;line-height:104%'>L’indirizzo di una variabile “a” è indicato con “&a” ed è quindi multiplo di 4.  N.B. la riga di codice a=a+1; non è un’uguaglianza, ma un’assegnazione! <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.5pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Il calcolatore all’indirizzo &a sovrascriverà al valore della variabile a, che quindi sarà perso, il valore incrementato di 1. <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:29.35pt; margin-left:1.2pt;text-align:justify;text-justify:inter-ideograph;text-indent: -.5pt;line-height:104%'>Ringraziamenti. Il presente capitolo è stato scritto anche grazie al prezioso contributo dello studente Donato Mancuso con la successiva revisione del suo collega Pasquale

Bonasia.  

Riferimenti 

<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.55pt;

margin-left:36.0pt;text-indent:-18.0pt'>1.       Bevilacqua, V.: Dispense Teoria 1 e IEEE 754 In: http://www.vitoantoniobevilacqua.it   <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.9pt; margin-left:36.0pt;text-indent:-18.0pt'>2.       http://it.wikipedia.org/wiki/IEEE_754 <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.9pt; margin-left:36.0pt;text-indent:-18.0pt'>3.       http://it.wikipedia.org/wiki/Ordine_dei_byte <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:12.05pt; margin-left:.7pt'>Appendice: Codice in linguaggio C (per ora solo di test)  <p class=MsoNormal style='margin-top:0cm;margin-right:76.9pt;margin-bottom: .15pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>#include<stdio.h><p class=MsoNormal style='margin-top:0cm;margin-right:76.9pt;margin-bottom: .15pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>#include<conio.h>/*nonANSIC*/<p class=MsoNormal style='margin-top:0cm;margin-right:249.75pt;margin-bottom: .15pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>/*#include<math.h>  perusarelafunzionepow*/intmain() {     unsignedcharbyte[4];     unsignedchar*c;     charbit[9];     inti,j;     floata;     float*p=NULL; <p class=MsoNormal style='margin-top:0cm;margin-right:441.75pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>     a=0; <p class=MsoNormal style='margin-top:0cm;margin-right:163.35pt;margin-bottom: .15pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>    printf("Ledimensioniinbytedivariabili\n");     printf("char,int,doubleefloatvalgono\n"); <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.15pt; margin-left:.45pt;text-indent:-.5pt;line-height:103%'>    printf("%d%d%d%d\n",sizeof(char),sizeof(int),sizeof(float),sizeof(double)); <p class=MsoNormal style='margin-top:0cm;margin-right:451.35pt;margin-bottom: .15pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>     do    { <p class=MsoNormal style='margin-top:0cm;margin-right:264.1pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>        printf("inseriscia=");         scanf("%f",&a); <p class=MsoNormal style='margin-top:0cm;margin-right:76.9pt;margin-bottom: .15pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>        /*a=(float)pow(2,-2);utilepertrovareilrangedirappresentazione*/        p=&a; <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.15pt; margin-left:.45pt;text-indent:-.5pt;line-height:103%'>        c=(unsignedchar*)p; <p class=MsoNormal style='margin-top:0cm;margin-right:211.35pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>        printf("%d%d%d%d\n",*(c+3),*(c+2),*(c+1),*c);         printf("\n");         for(i=0;i<4;i++) <p class=MsoNormal style='margin-top:0cm;margin-right:264.1pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>        { <p class=MsoNormal style='margin-top:0cm;margin-right:316.9pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>            byte[i]=*(c+3-i);             j=0; <p class=MsoNormal style='margin-top:0cm;margin-right:264.1pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>            while(byte[i]>0) <p class=MsoNormal style='margin-top:0cm;margin-right:264.1pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>            { <p class=MsoNormal style='margin-top:0cm;margin-right:312.15pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>                bit[j]=byte[i]%2;                 byte[i]=byte[i]/2;                 j=j+1;             } <p class=MsoNormal style='margin-top:0cm;margin-right:264.1pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>            for(;j<8;bit[j++]=0);             for(j=7;j>=0;j--)                 printf("%d",bit[j]);             printf(""); <p class=MsoNormal style='margin-top:0cm;margin-right:316.95pt;margin-bottom: .15pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>        }         printf("\n\n");         printf("altronumero?\n"); <p class=MsoNormal style='margin-top:0cm;margin-right:456.15pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>     } <p class=MsoNormal style='margin-top:0cm;margin-right:264.1pt;margin-bottom: .2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>    while(getch()!='n'); <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:.7pt;margin-bottom:.0001pt'> <p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:.15pt; margin-left:.45pt;text-indent:-.5pt;line-height:103%'>    return0; <p class=MsoNormal style='margin-top:0cm;margin-right:264.1pt;margin-bottom:

.2pt;margin-left:.45pt;text-indent:-.5pt;line-height:103%'>} </div></body></html>