Conversione numerica generalizzata

Messaggioda mau21 » 10/02/2024, 12:55

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!
mau21
New Member
New Member
 
Messaggio: 30 di 83
Iscritto il: 01/02/2024, 11:13

Re: Conversione numerica generalizzata

Messaggioda utente__medio » 10/02/2024, 13:42

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.
"Ci abbaiano, Sancho; segno che stiamo cavalcando!"
utente__medio
Junior Member
Junior Member
 
Messaggio: 322 di 394
Iscritto il: 02/11/2021, 12:48
Località: Draghistan

Re: Conversione numerica generalizzata

Messaggioda sellacollesella » 10/02/2024, 14:24

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. :-)
sellacollesella
Average Member
Average Member
 
Messaggio: 786 di 959
Iscritto il: 08/04/2022, 12:43

Re: Conversione numerica generalizzata

Messaggioda mau21 » 10/02/2024, 16:02

Va bene, grazie a entrambi!
mau21
New Member
New Member
 
Messaggio: 31 di 83
Iscritto il: 01/02/2024, 11:13

Re: Conversione numerica generalizzata

Messaggioda mau21 » 10/02/2024, 16:54

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!
mau21
New Member
New Member
 
Messaggio: 32 di 83
Iscritto il: 01/02/2024, 11:13

Re: Conversione numerica generalizzata

Messaggioda utente__medio » 10/02/2024, 17:19

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)$
"Ci abbaiano, Sancho; segno che stiamo cavalcando!"
utente__medio
Junior Member
Junior Member
 
Messaggio: 323 di 394
Iscritto il: 02/11/2021, 12:48
Località: Draghistan

Re: Conversione numerica generalizzata

Messaggioda mau21 » 11/02/2024, 17:30

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!
mau21
New Member
New Member
 
Messaggio: 34 di 83
Iscritto il: 01/02/2024, 11:13

Re: Conversione numerica generalizzata

Messaggioda apatriarca » 12/02/2024, 15:54

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5788 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite