Pagina 1 di 1
Conversione numerica generalizzata
Inviato:
10/02/2024, 12:55
da mau21
Buongiorno,
vorrei porre una domanda in merito alla conversione numerica: data una base $A$ io so come passare da quella alla base $10$ e viceversa; mi chiedevo però, nel caso in cui avessi un'altra base $B$ e volessi convertire un numero da $A$ a $B$ (e viceversa) sarei obbligato a passare per la base $10$ o esiste una regola generale di conversione diretta? Grazie mille!
Re: Conversione numerica generalizzata
Inviato:
10/02/2024, 13:42
da utente__medio
Ciao, in generale le cifre di un numero $N$ in una generica base $b$ sono costituite dai resti in ordine inverso delle divisioni successive di $N$ per $b$ fino all'annullarsi del quoziente.
Quindi alla fine tutto si riduce a delle divisioni, ma ovviamente mentre tutti (in teoria) sono in grado di svolgere delle divisioni in base $10$, lo stesso non si può dire per esempio per basi di $7$ e $31$. Ecco quindi che spesso il passaggio per la base $10$ diventa indispensabile, almeno fin quando si opera su carta.
Re: Conversione numerica generalizzata
Inviato:
10/02/2024, 14:24
da sellacollesella
Grazie alla rappresentazione annidata di Horner: \[
{\color{red}{1}}{\color{green}{2}}{\color{blue}{3}}{\color{magenta}{4}}_6 = (({\color{red}{1}}\cdot 6 + {\color{green}{2}})6 + {\color{blue}{3}})6 + {\color{magenta}{4}}
\] puoi operare direttamente in base otto: \[
{\color{red}{1}}\cdot 6 + {\color{green}{2}} = 10)6 = 60) + {\color{blue}{3}} = 63)6 = 462) + {\color{magenta}{4}} = 466
\] per ottenere la conversione desiderata: \[
\boxed{1234_6 = 466_8}
\] Però non so quanto sia conveniente, boh.
Re: Conversione numerica generalizzata
Inviato:
10/02/2024, 16:02
da mau21
Va bene, grazie a entrambi!
Re: Conversione numerica generalizzata
Inviato:
10/02/2024, 16:54
da mau21
Scusatemi di nuovo, vorrei fare una domanda banale ma che francamente non capisco:
Per convertire $(16)_10$ in $(16)_16$ dovrei utilizzare il metodo delle divisioni ripetute, ma, così facendo:
$16/16=1$ con resto $0$,
$1/16=0$ con resto $1$.
Letti al contrario diventa $(16)_16=10$
Ma in teoria non sarebbe dovuto venire $A$?
Capisco che poi mi basta sostituire $(10)_16=A$ e il risultato viene correttamente, ma, in teoria, non sarebbe dovuto "saltare fuori da solo" durante le divisioni (come resto intendo)?
Grazie mille!
Re: Conversione numerica generalizzata
Inviato:
10/02/2024, 17:19
da utente__medio
Guarda che $(16)_(10) = (10)_(16)$, esattamente il risultato che si ottiene con l'algoritmo delle divisioni successive.
La $A$ scaturisce da un resto di $10$ come nel seguente caso:
$26/16 = 1$ con resto $10$
$1/16 = 0$ con resto $1$
Ossia $(26)_(10) = ([1][10])_(16) = (1A)_(16)$
Re: Conversione numerica generalizzata
Inviato:
11/02/2024, 17:30
da mau21
Grazie per il tempo dedicatomi; non capisco questa cosa: l'ultima domanda che ho posto era scaturita da un esercizio d'esame svolto che avevo provato a guardare, il testo è il seguente:
TESTO:
Siano date le seguenti definizioni C
typedef struct {double a; double int b;} miotipo;
miotipo miavar;
dove il tipo double richiede 64 bit. miavar è allocata in memoria centrale a partire dall'indirizzo esadecimale AAAA.0AFF. Calcolare: a)il numero di byte richiesti dalla variabile miavar in decimale: (spazio per la risposta) in esadecimale: (spazio per la risposta)
b) Scrivere l'espressione per calcolare l'indirizzo esadecimale del primo byte che segue quelli allocati per miavar e infine riportare il valore calcolato dell'espressione:
AAAA 0AFF+ .......=.........
Ora, se non ho calcolato male lo spazio occupato è di $(16)_10=(10)_16$ bytes, però, nelle soluzioni, il prof somma all'indirizzo di miavar il valore "A", quindi a questo punto mi chiedo da dove venga.
Mi potreste aiutare per favore?
Grazie mille!
Re: Conversione numerica generalizzata
Inviato:
12/02/2024, 15:54
da apatriarca
Il numero di byte è uguale a \(2 \times 64 / 8 = 16_{10} = 10_{16}\) come hai effettivamente scritto. Credo che il professore abbia sbagliato nelle soluzioni per il secondo esercizio.