Conversioni numeriche
Questo si fa usando le tabelle di conversione.
Conversione da esadecimale a binario
- Passaggio 1: convertire da esadecimale a binario e vedo che: C -> 1100, 7 -> 0111. Quindi C7 -> 1100'0111.
Conversione da esadecimale a decimale
Conversione da esadecimale a decimale (es. C7).
Senza segno: si vanno a sommare tutte le potenze di 2.
- Passaggio 2: mi devo chiedere se la rappresentazione è senza segno o in complemento a 2.
Se 0 non cambia nulla rispetto alla rappresentazione senza segno, infatti 0, nel complemento a 2, indica che il numero è positivo.
Complemento a 2.
- Passaggio 1: guardo il primo bit. Se 1, il numero è Negativo.
- Passaggio 1: scrivo il numero complementare, quindi 11000111 diventa 00111000.
- Passaggio 2: a questo numero devo sommare 1. 00111000 + 1 = ____________ 00111001.
- Passaggio 3: trasformo questo numero in un numero in base decimale seguendo il procedimento visto prima.
Siccome il mio numero era negativo, l'ho visto prima, lo abbiamo visto subito analizzando il primo bit, quello che ottengo non sarà 57, ma -57.
Conversione float con virgola mobile
Ho quattro cifre esadecimali (quindi 16 bit), che sono la rappresentazione a mezza precisione di un numero in virgola mobile.
Il fatto che sia in mezza precisione me lo dice l'esercizio, potrebbe anche essere in altri modi.
- Passaggio 1: supponiamo di leggere il valore 57D2.
Guardo la tabella e vedo che: 5 = 0101, 7 = 0111, D = 1101, 2 = 0010.
- Passaggio 2: ottengo il numero 0101011111010010, cioè 0'10101'1111010010.
Questo numero è composto da: 0 -> segno positivo, 1 -> segno negativo.
Conversione float (con virgola mobile).
- Passaggio 3.1: il primo bit lo tengo da parte.
- Passaggio 3: faccio le varie operazioni sulle parti del mio numero.
- Passaggio 3.2: l'esponente lo porto in decimale: 10101 = 16 + 4 + 1 = 21.
21 non è proprio l'esponente del floating point perché questo è l'esponente + 15. Quindi il vero esponente è: 21 - 15 = 6.
- Passaggio 3.3: la parte frazionaria sarà della forma: 1.1111010010.
Quindi si scrive 1.(parte frazionaria), questo per quanto descritto nella definizione di numero floating point.
Un numero floating point (virgola mobile) è della forma scritta sopra, dove "f" rappresenta la parte frazionaria, "e" l'esponente. 1 non è un bit della parte frazionaria ma le va aggiunto.
Risultato decimale
Se volessi portare questo numero in base Decimale devo:
- Passaggio 1: svolgere il prodotto e quindi ottenere: 1111101.001.
- Passaggio 2: la parte intera si ottiene con le potenze di 2: 64+32+16+8+4+1 = 125.
- Passaggio 3: anche la parte decimale si ottiene con le potenze di due che però sono, partendo immediatamente a destra della virgola, 1/2, 1/4, 1/8.
Quindi la parte frazionaria è: Risultato = 125.125.
Rappresentazione in half precision
- Passaggio 1: supponiamo di leggere il valore -0.0935.
Vogliamo rappresentarlo in floating point a 16 bit, half precision.