CONVERSIONE DA DECIMALE A BINARIO Il procedimento per convertire in forma binaria un certo numero decimale n consiste nello scrivere, andando da destra verso sinistra, le cifre oppure seguendo delle determinate regole che sono: - Se n è pari si scrive ; - Se n è dispari si scrive e si sostituisce n con n-; Se n è dispari, sottraendo uno ad n, esso diventerà pari e si potrà effettuare il procedimento dividendo n per due e si continua così finché non si arriva allo arrivando così al termine del procedimento. Scriviamo 25 in forma binaria. Il numero binario di 25 è 2. N = 25; n è dispari quindi scriviamo N - = 24; 24/2 = 2. N = 2; n è pari quindi scriviamo N = 2; 2/2 = 6. N = 6; n è pari quindi scriviamo N = 6; 6/2 = 3. N = 3; n è dispari quindi scriviamo N- = 2; 2/2 =. N = ; n è dispari quindi scriviamo N- =. N = ; n è zero quindi abbiamo terminato il procedimento Ora leggiamo i numeri dal basso verso l alto e otterremmo il valore che noi volevamo. Per effettuare un ulteriore prova basta si fa: 2 = * 2 + *2 + * 22 + *23 + *24 = + + + 8 + 6 = 25. In sintesi possiamo anche scrivere 25 2 6 3 Così abbiamo trasformato il nostro valore decimale intero in binario.
CONVERSIONE DA DECIMALE IN FLOATING POINT Per la conversione da decimale in floating point bisogna suddividere il numero decimale in due parti; una parte è la parte intera quindi il numero prima della virgola mentre la seconda è la parte frazionaria cioè la parte dopo la virgola. Per trasformare la parte intera si fa nella maniera riportata precedentemente. Se volessimo convertire un numero decimale come.876 in binario prima di tutto si trasforma l intero ; = 2 Ora trasformiamo la parte decimale ovvero.876 Per fare questo bisogna moltiplicare per 2 la cifra con la virgola e vedere se il risultato dato, sia maggiore di uno se lo è scriviamo e togliamo uno MANTISSA: Esempio.876*2 =,752.752*2 =,54.54*2=.8.8*2=.6.6*2=.32.32*2=.64.64*2=.28.28*2=.256 e così via fino ad arrivare al numero di bit assegnatoci e fino ad ottenere un valore del tipo. 2 Quindi il nostro valore.876 =. 2 Per ottenere la mantissa, in questo caso di 24 cifre, bisogna normalizzare cioè avere un numero. e in seguito qualcosa. Noi, per avere la forma richiesta, dobbiamo spostare la virgola a sinistra di 3 posizioni per far si che la mantissa diventi.2 *23 La prima cifra della mantissa, ovvero l, si omette sempre quindi la mantissa sarà pari a 2 ESPONENTE: Avendo dovuto fare lo shift della mantissa di 3 posizioni a sinistra (quindi queste 3 posizioni verranno sommate ai bit dell esponente es: 5 bit per l esponente si farà 25 = 32 / 2 = 5 + 3 = 8) si sommeranno le posizioni shiftate al valore dell esponente. In questo caso l esponente è espresso in codice ECCESSO 27 quindi si farà 27 + 3 = 3 e verrà trasformato anch esso in un binario che sarà 2 SEGNO: Se il numero in virgola mobile tra trasformare è positivo il segno avrà valore altrimenti avrà valore. Alla fine avremmo il seguente risultato SEGNO ESPONENTE MANTISSA 2
CONVERSIONE DA FLOATING POINT IN DECIMALE Per convertire un numero decimale in un floating point si utilizzano due modi differenti, uno per la parte intera uno per la parte frazionaria. Prendiamo ad esempio questo numero decimale:.2 Effettuiamo ora la conversione della parte intera ovvero di 2 Parte intera: *2 + *2 + *22 + *23= + + 4 + 8 = 3 Parte decimale: *2- + *2-2 + *2-3 + *2-4 + *2-5 + *2-6 = + + -25 + +.325 +.5625 =.7875 Quindi il valore trasformato in decimale è:.2 = 3.2875 3
OPERAZIONI BINARIE ADDIZIONE BINARIA Tabella dell addizione: + (A)2 (B)2 (A) + (B) (A + B) 2 Quando si ha un + si effettua un riporto di uno e si scrive e si aggiunge l all operazione che segue SOTTRAZIONE BINARIA Per effettuare la sottrazione il metodo più semplice, è quello di fare il COMPLEMENTO A 2 del sottraendo. Per fare il complemento a due basta invertire tutti i numeri appena si trova il primo uno leggendo da destra a sinistra e, invertire tutti gli altri valori. ESEMPIO: 5: 2 complemento a due -5: 2 (il primo bit serve per il segno) (A) (B) (-B) (A) + (B) (A+(-B)) Il risultato finale di (A + (- B)) è di 2. Ho tolto un bit in quanto se effettuo una somma a 6 bit devo restituire un risultato con i medesimi bit. 4
MOLTIPLICAZIONE BINARIA Tabella della moltiplicazione: * Le regole della moltiplicazione sono sintetizzate nella tabella. È consigliabile sommare 2 a 2 i risultati in maniera da non incombere in una specie di doppio riporto. (A) 2 (B) 2 A B - ------ F G * Sommo queste 3 celle (v.di punto ) Sommo queste 2 celle (v.di punto 2) Punto ) + - + - 2 (val F) Punto 2) ---+ --- 2 (val G) Ora sommo F con G e trovo il risultato della moltiplicazione: + 2 (A * B) 2 5
DIVISIONE BINARIA Le regole della divisione binaria sono uguali a quelle della divisione decimale. Nella divisione binaria si mette un se il dividendo è contenuto nel divisore altrimenti. Ogni volta tiro giù un altra cifra. Se arrivo in fondo con un valore ma nessun altra cifra, vuol dire che la divisone ha il resto. (A) 2 (B) 2 Resto della divisione Il risultato di questa divisione è 2 con il resto di 2. 6
ALGORITMO DI BOOTH La moltiplicazione tra binari, oltre che con il metodo normale, la si può fare in maniera differente utilizzando l algoritmo di Booth. L algoritmo di Booth fa riferimento ad una semplice tabella. Prende in ingresso una coppia di bit del moltiplicando e guarda la seguente tabella: - La prima colonna rappresenta la coppia di bit e la seconda colonna rappresenta il valore da attribuire alla moltiplicazione. (A) 2 (B) 2 Ora eseguiamo il complemento a 2 nell eventualità che si possa avere una coppia di bit che sia quindi il complemento di (A) è. Ora trasformiamo (B) utilizzando l algoritmo di Booth. A (B) aggiungeremo uno fittizio e quindi diventerà e si trasformerà in: ->, -> -, ->, -> + Quindi l algoritmo di Booth di (B) sarà -. Siccome si ha una moltiplicazione di 4 bit * 4 bit il risultato sarà di 8 bit. La moltiplicazione sarà: 2 * - - - - 2 Togliamo l di bit in quanto i bit devono essere 8 e quindi il risultato sarà 2; 7
OPERAZIONI SU FLOATING POINT ADDIZIONE FLOATING POINT Per effettuare una somma avendo due floating point bisogna eseguire degli step. Step : Controllare se gli esponenti sono uguali. Se in un floating point ho un esponente a 5 bit che ha valore 2 = e un altro esponente SEMPRE a 5 bit dal valore 3 = non posso effettuare la somma. Per renderli uguali devo rendere l esponente del numero minore uguale a quello del numero maggiore. In questo caso devo aggiungere a 2. Numero Numero 2 Il numero, al cui esponente verrà sommato, verrà modificato come segue e si effettuerà l addizione sul nuovo numero: Numero new: Numero 2: Step 2: Ora che abbiamo reso uguali gli esponenti sommiamo le mantisse. Prendiamo come esempio i due numeri dati in precedenza: Numero : Numero 2:, +,, Già normalizzato quindi non serve che venga normalizzato. Con normalizzazione si intende che il numero venga portato alla forma base della mantissa quindi, Risultato somma: 8
Esempio utilizzando la normalizzazione e il troncamento. Numero : Numero 2:, +,, In questo caso la nuova mantissa non è normalizzata quindi si effettua uno switch della virgola di una posizione verso sinistra in modo da avere la forma canonica della mantissa ovvero, Switchando otteniamo questa mantissa:, Questa mantissa, però, ha 9 bit e quindi si dovrà troncare l ultimo bit in quanto è in eccesso e uscirebbe dal limite degli 8 bit per la mantissa quindi numero della somma sarà: Risultato somma: SOTTRAZIONE FLOATING POINT Per effettuare la sottrazione tra due floating point bisogna eseguire i stessi passaggi che riguardano la somma cioè: ) Prendere il numero con esponente più piccolo e rendere l esponente uguale al più grande, shiftando a sinistra la virgola per un numero di bit pari alla differenza tra gli esponenti; 2) Sottrarre la mantissa 3) Normalizzare il risultato finale Numero : Numero 2: Il numero, al cui esponente verrà sommato, verrà modificato come segue e si effettuerà la sottrazione sul nuovo numero: Numero new: Numero 2: 9
Ora che abbiamo reso uguali gli esponenti sommiamo le mantisse. Prendiamo come esempio i due numeri dati in precedenza: Numero : Numero 2:,,, In questo caso la mantissa non si normalizza in quanto abbiamo già la forma canonica ovvero, (si poteva pure fare il complemento a due e fare una somma tra i due membri dell operazione, il risultato non sarebbe cambiato). Quindi il risultato è: MOLTIPLICAZIONE FLOATING POINT Per eseguire la moltiplicazione bisogna seguire dei semplici passi: ) ER = EA + EB BIAS 2) MR = MA * MB 3) SR = SA + SB 4) Normalizzare E = Esponente; M = mantissa; S = segno; BIAS = (2n/2)- [n = numero bit dell esponente] Prendiamo due numeri come per esempio (5,6875) e (-,65625) e trasformiamoli in floating point: (5,6875) (-65625) Verifichiamo che i numeri siano stati convertiti in maniera esatta: (5,6875) Primo bit segno: (+) Seconda parte esponente: 7 5 (bias) = 2 (numero di posizioni shiftate) Terza parte mantissa:, = + *,5 + *,25 + */8 + */32 + */64 =,42875 * 22 = (5,6875)
(-,65625) - Primo bit segno: (-) Seconda parte esponente: 5 5 (bias) = (numero di posizioni shiftate) Terza parte mantissa:, = + *,5 + */8 + */32 =,65625 * 2 = (-,65625) Ora calcoliamo il risultato ) ER = 7 + 5 5 (BIAS) = 7 + (normalizzazione) = 8 2) SR = (-) 3) MR = *, 4) MR =, Risultato: DIVISIONE FLOATING POINT Per eseguire la divisione bisogna seguire 4 semplici passi: ) ER = EA EB + BIAS 2) SR = SA + SB 3) MR = MA / MB 4) Normalizzare Prendiamo due numeri () e (2,5) rendiamoli numeri in floating point e dividiamoli tra loro: () () = ()2, * 23 Calcolo dell esponente: BIAS + Pos. Shiftate Esponente
(2,5) (2,5) = (,)2, * 2 BIAS Pos. Shiftate Esponente + Ora calcoliamo il risultato: ) ER = 8-6+5 = 7 (in questo caso non serve la normalizzazione in quanto la mantissa è già in formato, ) 2) SR = (+) 3) MR = MA / MB MR = Risultato divisione: Per vedere se è giusto il risultato si effettua questa conferma: 7 5 = 2 (posizioni da shiftare) Shifto l di 2 posizioni a sinistra in modo da ottenere: = 4; :2,5 = 4; La divisione è corretta. 2