Salta al contenuto
Note per Studenti Esercizio 2 · da esadecimale a decimale con formato assegnato (temi d'esame febbraio 2023, gennaio 2025, gennaio 2021 e luglio 2020)

Esercizio 2da esadecimale a decimale con formato assegnato (temi d'esame febbraio 2023, gennaio 2025, gennaio 2021 e luglio 2020)

Esame
In questa pagina 4

Testo (temi d'esame febbraio 2023 problema 2; gennaio 2025; gennaio 2021 problema P1.1; luglio 2020 problema 1). Si convertano in numeri decimali i seguenti valori esadecimali a 16 bit, applicando la normalizzazione indicata (SS = con segno, UU = senza segno).

(a) 0xECCC\texttt{0xECCC} in 2.14 U; 0x99F0\texttt{0x99F0} in 1.15 S; 0x80F0\texttt{0x80F0} in 3.13 U; 0xA9BC\texttt{0xA9BC} in 7.9 S. (b) 0x2CA0\texttt{0x2CA0} in 3.13 U; 0xABC0\texttt{0xABC0} in 8.8 S; 0xCB33\texttt{0xCB33} in 7.9 S. (c) 0x4E19\texttt{0x4E19} in 4.12 U; 0x9F68\texttt{0x9F68} in 3.13 S e in 3.13 U; 0xEF00\texttt{0xEF00} in 8.8 S. (d) 0xBD13\texttt{0xBD13} in 4.12 S; 0x6F98\texttt{0x6F98} in 13.3 S; 0xFFFF\texttt{0xFFFF} in 1.15 S; 0x7523\texttt{0x7523} in 2.14 S; 0x85AA\texttt{0x85AA} in 3.13 S.


Teoria usata: Virgola fissa - formati n.m e normalizzazioneIn virgola fissa il processore fa aritmetica sugli interi (con segno) e il fattore di scalacostante per cui si moltiplica un valore reale per ottenere l'intero memorizzato $2^{m}$ resta sottinteso: il formato n.m dice che dei bit disponibili $n$ sono la parte intera (compreso il segno se il numero è con segno, S; nessun segno se U) e $m$ la parte frazionaria. Il valore è $\text{codice}/2^m$. Passare dal formato n.m al decimale, o viceversa, è il calcolo più frequente dell'esame: su 16 bit $\text{valore}=\text{codice}/2^m$, l'intervallo è $[0,2^n)$ (U) oppure $[-2^{n-1},2^{n-1})$ (S), la risoluzione è $2^{-m}$.Virgola fissa - formati n.m e normalizzazione →, Numeri binari e complemento a dueI processori lavorano con un numero fisso di bit $n$. I naturali vanno da $0$ a $2^n-1$; per i negativi si usa il complemento a due: $C_2(N)=2^n-N=\overline N+1$ (si invertono tutti i bit e si somma 1). Con $n$ bit rappresenta $-2^{n-1}\le N\le2^{n-1}-1$, ha un solo zero e unifica somma e sottrazione. Quando il risultato esce dall'intervallo c'è overflow; gli overflow intermedi si compensano se il risultato finale è rappresentabile. La lunghezza di parola non è l'accuratezza.Numeri binari e complemento a due →.

Metodo

Si legge il codice esadecimale come numero intero CC senza segno (da 0 a 65535). Se il formato è S e il bit più alto è 1 (cioè C≥32768C\ge32768, prima cifra esadecimale da 8 a F) il numero è negativo: C←C−65536C\leftarrow C-65536. Poi x=C/2mx=C/2^m, con mm il numero dopo il punto del formato.

Svolgimento

(a)

  • 0xECCC=60620\texttt{0xECCC}=60620; U: x=60620214=3,700x=\frac{60620}{2^{14}}=\mathbf{3{,}700} (più precisamente 3,699953{,}69995).
  • 0x99F0=39408≥32768\texttt{0x99F0}=39408\ge32768: C=39408−65536=−26128C=39408-65536=-26128; x=−26128215=−0,797x=\frac{-26128}{2^{15}}=\mathbf{-0{,}797}.
  • 0x80F0=33008\texttt{0x80F0}=33008; U: 33008213=4,029\frac{33008}{2^{13}}=\mathbf{4{,}029} (lo stesso codice in S sarebbe negativo).
  • 0xA9BC=43452\texttt{0xA9BC}=43452: C=−22084C=-22084; x=−2208429=−43,13x=\frac{-22084}{2^9}=\mathbf{-43{,}13}.

(b)

  • 0x2CA0=11424\texttt{0x2CA0}=11424 (prima cifra 2: positivo): 11424213=1,395\frac{11424}{2^{13}}=\mathbf{1{,}395}.
  • 0xABC0=43968\texttt{0xABC0}=43968: C=−21568C=-21568; x=−21568256=−84,25x=\frac{-21568}{256}=\mathbf{-84{,}25} (esatto: 0xABC0=0xAB⋅256+0xC0\texttt{0xABC0}=\texttt{0xAB}\cdot256+\texttt{0xC0}).
  • 0xCB33=52019\texttt{0xCB33}=52019: C=−13517C=-13517; x=−1351729=−26,40x=\frac{-13517}{2^9}=\mathbf{-26{,}40}.

(c)

  • 0x4E19=19993\texttt{0x4E19}=19993; 4.12 U: 199934096=4,881\frac{19993}{4096}=\mathbf{4{,}881}.
  • 0x9F68=40808\texttt{0x9F68}=40808. In 3.13 S: C=40808−65536=−24728C=40808-65536=-24728, x=−24728/8192=−3,019x=-24728/8192=\mathbf{-3{,}019}. In 3.13 U: x=40808/8192=4,981x=40808/8192=\mathbf{4{,}981}. Lo stesso codice dà due numeri molto diversi: senza il formato, il codice non ha significato.
  • 0xEF00=61184\texttt{0xEF00}=61184: C=−4352C=-4352 in 8.8 S: x=−4352/256=−17x=-4352/256=\mathbf{-17} (infatti 0xEF=−17\texttt{0xEF}=-17 come byte con segno).

(d)

  • 0xBD13\texttt{0xBD13} in 4.12 S: 48403−65536=−1713348403-65536=-17133, x=−17133/4096=−4,183x=-17133/4096=\mathbf{-4{,}183}.
  • 0x6F98\texttt{0x6F98} in 13.3 S: 28568/8=357128568/8=\mathbf{3571} (positivo; m=3m=3 bit frazionari, quindi precisione 0,1250{,}125).
  • 0xFFFF\texttt{0xFFFF} in 1.15 S: C=−1C=-1: x=−2−15=−3,05⋅10−5x=-2^{-15}=\mathbf{-3{,}05\cdot10^{-5}} (il più piccolo negativo, un LSB).
  • 0x7523\texttt{0x7523} in 2.14 S: 29987/16384=1,83029987/16384=\mathbf{1{,}830}.
  • 0x85AA\texttt{0x85AA} in 3.13 S: 34218−65536=−3131834218-65536=-31318, x=−31318/8192=−3,823x=-31318/8192=\mathbf{-3{,}823}.

Controllo

Il valore ottenuto deve cadere nell'intervallo del formato: per 2.14 U [0,4)[0,4) ✓ (3,703{,}70); per 1.15 S [−1,1)[-1,1) ✓ (−0,797-0{,}797); per 3.13 U [0,8)[0,8) ✓ (4,034{,}03); per 7.9 S [−64,64)[-64,64) ✓ (−43,13-43{,}13 e −26,40-26{,}40); per 8.8 S [−128,128)[-128,128) ✓.

Errori comuni

  • Leggere un codice con prima cifra ≥8\ge8 come positivo in un formato S (o come negativo in U).
  • Dividere per 2n2^n invece che per 2m2^m (si scambiano parte intera e parte frazionaria).
  • Dimenticare che in S il segno fa parte di nn (1.15 S ha 15 bit frazionari, intervallo [−1,1)[-1,1)).
  • Convertire male l'esadecimale (per esempio 0xCB33=12⋅4096+11⋅256+3⋅16+3=52019\texttt{0xCB33}=12\cdot4096+11\cdot256+3\cdot16+3=52019).

Versione ripasso

Testo. Convertire in decimale codici esadecimali a 16 bit con formato assegnato (n.mn.m S/U) (febbraio 2023, gennaio 2025, gennaio 2021, luglio 2020).

Teoria collegata