[Reti logiche] Aritmetica cambio base
Buongiorno, non riesco a capire il funzionamento del cambio di base e del perchè si usi sempre la formula $A = sum_(i=0)^(n-1) a_i*beta^i$, con $a_i$ le cifre della rappresentazione di A (cioè $A=(a_(n-1)...a_1a_0)_beta$).
Volendo fare un esempio:
ho due cifre $c_1$ e $c_0$ in base 6 e voglio rappresentarle in base 2. Per fare questa conversione devo usare la formula riportata sopra, ovvero fare: $c_1 * 6 + c_0$ (il numero 6 ovviamente è usato come $111$).
La domanda è: perchè? Come fa a tornare corretto?
Se ho $c_1=101$ (rappresentazione di 5) e $c_0=001$ (rappresentazione di 1) devo convertire il numero 51 (base 6) in base 2. Dopo aver svolto i conti ottengo $11111$, che è la rappresentazione di 31 e non di 51!
Cosa non torna?
Volendo fare un esempio:
ho due cifre $c_1$ e $c_0$ in base 6 e voglio rappresentarle in base 2. Per fare questa conversione devo usare la formula riportata sopra, ovvero fare: $c_1 * 6 + c_0$ (il numero 6 ovviamente è usato come $111$).
La domanda è: perchè? Come fa a tornare corretto?
Se ho $c_1=101$ (rappresentazione di 5) e $c_0=001$ (rappresentazione di 1) devo convertire il numero 51 (base 6) in base 2. Dopo aver svolto i conti ottengo $11111$, che è la rappresentazione di 31 e non di 51!
Cosa non torna?
Risposte
Perché \(51_6 = 1 + 5\cdot 6=31_{10}\), ovviamente.
"solaàl":
Perché \(51_6 = 1 + 5\cdot 6=31_{10}\), ovviamente.
Credo di non aver capito

Cioè non capisco quando usarla e come usarla. Forse non sono entrato nel meccanismo...
Il numero 51, in base sei, è il numero 31, in base dieci.
Dato un numero in base 10, la sua rappresentazione in base [inline]b[/inline] si ottiene così:
Dato un numero in base 10, la sua rappresentazione in base [inline]b[/inline] si ottiene così:
inBase :: Integer -> Integer -> Integer inBase n b = foldl (f b) n0 ns where n0 = head $ digits n ns = tail $ digits n f b q p = q * b + p digits 0 = [] digits x = digits (x `div` 10) ++ [x `mod` 10]
54 `inBase` 6 => 34 31 `inBase` 6 => 19 51 `inBase` 6 => 31 23 `inBase` 10
"solaàl":
Dato un numero in base 10, la sua rappresentazione in base [inline]b[/inline] si ottiene così:
inBase :: Integer -> Integer -> Integer inBase n b = foldl (f b) n0 ns where n0 = head $ digits n ns = tail $ digits n f b q p = q * b + p digits 0 = [] digits x = digits (x `div` 10) ++ [x `mod` 10]
Vedo che c'è una moltiplicazione e una somma e una divisione e un resto (modulo) ma onestamente, nonostante programmi con vari linguaggi da anni, non riesco a capire molto cosa fa questo codice.
In pratica quando devo convertire $n$ cifre da base $b$ a base $b'$ devo sempre fare $sum_(i=0)^(n-1)n_i*b$? Se sì, perchè?