[Codice Binario] - Da virgola mobile a decimale
Buonasera! Sono bloccato da un po' su questa tipologia di esercizi.
Ipotizzando che i numeri riportati in tabella in base sedici siano rappresentati in virgola mobile con 32 bit, di cui 8 dedicati all’esponente, si identifichino i numeri corrispondenti (mantissa rappresentata in binario, esponente in decimale) sia nella convenzione che rappresenta l’esponente in complemento a due, sia secondo lo standard IEEE 754, commentando adeguatamente le risposte.
Abbiamo per esempio il numero BC71AB98. Essendo 8 bit dedicati all'esponente so che 1 bit sarà dedicato al segno e 23 bit saranno dedicati alla mantissa. Converto prima il numero in binario ottenendo: 1011 1100 0111 0001 1010 1011 1001 1000.
Essendo 1 il primo numero che incontriamo deduco che il numero è negativo. Come richiesto dall'esercizio i 23 bit successivi li lascio rappresentati in binario (la mantissa). Per l'esponente non so proprio cosa fare. Non so come convertire gli 8 bit dell'esponente ( 1001 1000 ) in complemento a 2 e nello standard IEEE 754. A parte il mio dubbio finale credete che l'impostazione dell'esercizio sia corretta o avreste fatto diversamente? Purtroppo non ho la soluzione dell'esercizio e non posso controllare i risultati!
Ipotizzando che i numeri riportati in tabella in base sedici siano rappresentati in virgola mobile con 32 bit, di cui 8 dedicati all’esponente, si identifichino i numeri corrispondenti (mantissa rappresentata in binario, esponente in decimale) sia nella convenzione che rappresenta l’esponente in complemento a due, sia secondo lo standard IEEE 754, commentando adeguatamente le risposte.
Abbiamo per esempio il numero BC71AB98. Essendo 8 bit dedicati all'esponente so che 1 bit sarà dedicato al segno e 23 bit saranno dedicati alla mantissa. Converto prima il numero in binario ottenendo: 1011 1100 0111 0001 1010 1011 1001 1000.
Essendo 1 il primo numero che incontriamo deduco che il numero è negativo. Come richiesto dall'esercizio i 23 bit successivi li lascio rappresentati in binario (la mantissa). Per l'esponente non so proprio cosa fare. Non so come convertire gli 8 bit dell'esponente ( 1001 1000 ) in complemento a 2 e nello standard IEEE 754. A parte il mio dubbio finale credete che l'impostazione dell'esercizio sia corretta o avreste fatto diversamente? Purtroppo non ho la soluzione dell'esercizio e non posso controllare i risultati!
Risposte
Hai scambiato l'ordine di mantissa ed esponente. L'ordine (a partire dal bit più significativo) è bit segno, esponente e mantissa. Almeno per quanto riguarda IEEE 754 (Single Precision). Nel tuo caso hai quindi un bit di segno uguale a 1 (numero negativo). Un esponente uguale a 0111 1000 e una mantissa uguale a 111 0001 1010 1011 1001 1000. L'esponente può ora essere interpretato come un numero in complemento a due a 8 bit (120), oppure come un numero in eccesso 127 (120-127=-7). Il tuo numero sarà quindi:
\[ -1.11100011010101110011000b \times 2^{120} \quad \text{oppure} \quad -1.11100011010101110011000b \times 2^{-7} \]
In entrambi i casi ho dato per scontato che ci fosse bit più significativo implicito nella mantissa.
EDIT: Nota che i numeri non sono ancora definiti in decimale. Per farlo il modo più semplice è riscrivere i numeri nella forma:
\[ -111100011010101110011000b \times 2^{e-23} = 15838104 \times 2^{e-23} \]
\[ -1.11100011010101110011000b \times 2^{120} \quad \text{oppure} \quad -1.11100011010101110011000b \times 2^{-7} \]
In entrambi i casi ho dato per scontato che ci fosse bit più significativo implicito nella mantissa.
EDIT: Nota che i numeri non sono ancora definiti in decimale. Per farlo il modo più semplice è riscrivere i numeri nella forma:
\[ -111100011010101110011000b \times 2^{e-23} = 15838104 \times 2^{e-23} \]