Conversione da binario a decimale

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
ciamiz
Prode Principiante
Messaggi: 38
Iscrizione: mercoledì 22 agosto 2007, 15:15

Conversione da binario a decimale

Messaggio da ciamiz »

Ciao a tutti ragazzi!

Per prima cosa non pensate che sia la solita banalità del cambio di sistema numerico...

Io ho bisogno di convertire un numero binario con MILIONI di bit in formato decimale,
espressamente NON utilizzando la solita formula bit * 2^n...

Come posso fare?

P.S. Il programma è scritto in C e Asm x86...

Grazie mille a tutti! Ciao!
Ciamiz
Avatar utente
bite
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3798
Iscrizione: sabato 19 maggio 2007, 22:10

Re: Conversione da binario a decimale

Messaggio da bite »

ciamiz ha scritto: Ciao a tutti ragazzi!

Per prima cosa non pensate che sia la solita banalità del cambio di sistema numerico...

Io ho bisogno di convertire un numero binario con MILIONI di bit in formato decimale,
espressamente NON utilizzando la solita formula bit * 2^n...

Come posso fare?

P.S. Il programma è scritto in C e Asm x86...

Grazie mille a tutti! Ciao!
Ciamiz
Quindi tu hai una stringona di qualche milione di bit e vuoi ottenerne la rappresentazione decimale, ho capito giusto?

Potrebbe servirti il CORDIC, vedi qui ad esempio (ma c'è anche molta altra documentazione in rete).

Però sarebbe scomodo ruotare davvero una stringa di milioni di bit, dovresti usare un indice invece.

PS pura curiosità, da dove viene la stringona?

EDIT scusa, ho dato per scontata una cosa, per convertire immagino che tu divida ripetutamente per dieci e tenga i resti come cifre decimali, l'algoritmo CORDIC che ti ho linkato serve a dividere.
Ultima modifica di bite il venerdì 28 settembre 2007, 0:23, modificato 1 volta in totale.
ciamiz
Prode Principiante
Messaggi: 38
Iscrizione: mercoledì 22 agosto 2007, 15:15

Re: Conversione da binario a decimale

Messaggio da ciamiz »

bite ha scritto:
ciamiz ha scritto: Ciao a tutti ragazzi!

Per prima cosa non pensate che sia la solita banalità del cambio di sistema numerico...

Io ho bisogno di convertire un numero binario con MILIONI di bit in formato decimale,
espressamente NON utilizzando la solita formula bit * 2^n...

Come posso fare?

P.S. Il programma è scritto in C e Asm x86...

Grazie mille a tutti! Ciao!
Ciamiz
Quindi tu hai una stringona di qualche milione di bit e vuoi ottenerne la rappresentazione decimale, ho capito giusto?

Potrebbe servirti il CORDIC, vedi qui ad esempio (ma c'è anche molta altra documentazione in rete).

Però sarebbe scomodo ruotare davvero una stringa di milioni di bit, dovresti usare un indice invece.

PS pura curiosità, da dove viene la stringona?

EDIT scusa, ho dato per scontata una cosa, per convertire immagino che tu divida ripetutamente per dieci e tenga i resti come cifre decimali, l'algoritmo CORDIC che ti ho linkato serve a dividere.
Scusami ma penso di essermi espresso male...

Io ho questa stringa (vettore) di n-milioni di bit che però sono "impacchettati" in "pacchetti" da 32 bit (variabile unsigned int in C)...

Ora facciamo finta che io abbia io abbia il valore binario di un int, voglio trasformarlo in decimale, faccio
bitn * 231 + bitn - 1 * 230 ...

Il problema è che io avendo ipotizziamo 8.000.000 di bit quindi un vettore di usigned int con 250.000 elementi, non posso fare bit8.000.000 * 27.999.999!

Quindi chiedo nuovamente se è possibile, e se si come, posso convertire un numero binario con n-milioni di cifre in decimale cosicchè da poterlo salvare o stampare a video?!?

Grazie mille nuovamente a tutti! Ciao!
Ciamiz
Avatar utente
mod
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 325
Iscrizione: sabato 3 giugno 2006, 2:43
Contatti:

Re: Conversione da binario a decimale

Messaggio da mod »

Potresti sfruttare i registri:

Codice: Seleziona tutto

unsigned int bin = numero da convertire
unsigned int pos = 0;
unsigned int dec = bin & 1;

while(bin)
{
  dec += (pos++ << 1) & (bin & 1);
  bin >>= 1;
}
Ultima modifica di mod il venerdì 28 settembre 2007, 1:48, modificato 1 volta in totale.
Avatar utente
Guiodic
Accecante Asceta
Accecante Asceta
Messaggi: 28474
Iscrizione: martedì 24 aprile 2007, 15:28
Località: Roma
Contatti:

Re: Conversione da binario a decimale

Messaggio da Guiodic »

ciamiz ha scritto:
bite ha scritto:
ciamiz ha scritto: Ciao a tutti ragazzi!

Per prima cosa non pensate che sia la solita banalità del cambio di sistema numerico...

Io ho bisogno di convertire un numero binario con MILIONI di bit in formato decimale,
espressamente NON utilizzando la solita formula bit * 2^n...

Come posso fare?

P.S. Il programma è scritto in C e Asm x86...

Grazie mille a tutti! Ciao!
Ciamiz
Quindi tu hai una stringona di qualche milione di bit e vuoi ottenerne la rappresentazione decimale, ho capito giusto?

Potrebbe servirti il CORDIC, vedi qui ad esempio (ma c'è anche molta altra documentazione in rete).

Però sarebbe scomodo ruotare davvero una stringa di milioni di bit, dovresti usare un indice invece.

PS pura curiosità, da dove viene la stringona?

EDIT scusa, ho dato per scontata una cosa, per convertire immagino che tu divida ripetutamente per dieci e tenga i resti come cifre decimali, l'algoritmo CORDIC che ti ho linkato serve a dividere.
Scusami ma penso di essermi espresso male...

Io ho questa stringa (vettore) di n-milioni di bit che però sono "impacchettati" in "pacchetti" da 32 bit (variabile unsigned int in C)...

Ora facciamo finta che io abbia io abbia il valore binario di un int, voglio trasformarlo in decimale, faccio
bitn * 231 + bitn - 1 * 230 ...

Il problema è che io avendo ipotizziamo 8.000.000 di bit quindi un vettore di usigned int con 250.000 elementi, non posso fare bit8.000.000 * 27.999.999!

Quindi chiedo nuovamente se è possibile, e se si come, posso convertire un numero binario con n-milioni di cifre in decimale cosicchè da poterlo salvare o stampare a video?!?

Grazie mille nuovamente a tutti! Ciao!
Ciamiz
Ma per numero decimale cosa intendi di preciso? Perché se pretendi di trasformarlo memorizzandolo in un unica variabile è impossibile, il numero sarebbe troppo grande.
Quindi immagini che lo vuoi trasformare in bcd.
ciamiz
Prode Principiante
Messaggi: 38
Iscrizione: mercoledì 22 agosto 2007, 15:15

Re: Conversione da binario a decimale

Messaggio da ciamiz »

Guiodic ha scritto:
ciamiz ha scritto:
bite ha scritto:
ciamiz ha scritto: Ciao a tutti ragazzi!

Per prima cosa non pensate che sia la solita banalità del cambio di sistema numerico...

Io ho bisogno di convertire un numero binario con MILIONI di bit in formato decimale,
espressamente NON utilizzando la solita formula bit * 2^n...

Come posso fare?

P.S. Il programma è scritto in C e Asm x86...

Grazie mille a tutti! Ciao!
Ciamiz
Quindi tu hai una stringona di qualche milione di bit e vuoi ottenerne la rappresentazione decimale, ho capito giusto?

Potrebbe servirti il CORDIC, vedi qui ad esempio (ma c'è anche molta altra documentazione in rete).

Però sarebbe scomodo ruotare davvero una stringa di milioni di bit, dovresti usare un indice invece.

PS pura curiosità, da dove viene la stringona?

EDIT scusa, ho dato per scontata una cosa, per convertire immagino che tu divida ripetutamente per dieci e tenga i resti come cifre decimali, l'algoritmo CORDIC che ti ho linkato serve a dividere.
Scusami ma penso di essermi espresso male...

Io ho questa stringa (vettore) di n-milioni di bit che però sono "impacchettati" in "pacchetti" da 32 bit (variabile unsigned int in C)...

Ora facciamo finta che io abbia io abbia il valore binario di un int, voglio trasformarlo in decimale, faccio
bitn * 231 + bitn - 1 * 230 ...

Il problema è che io avendo ipotizziamo 8.000.000 di bit quindi un vettore di usigned int con 250.000 elementi, non posso fare bit8.000.000 * 27.999.999!

Quindi chiedo nuovamente se è possibile, e se si come, posso convertire un numero binario con n-milioni di cifre in decimale cosicchè da poterlo salvare o stampare a video?!?

Grazie mille nuovamente a tutti! Ciao!
Ciamiz
Ma per numero decimale cosa intendi di preciso? Perché se pretendi di trasformarlo memorizzandolo in un unica variabile è impossibile, il numero sarebbe troppo grande.
Quindi immagini che lo vuoi trasformare in bcd.
Diciamo che lo voglio trasformare in base 10 in modo tale che sia stampabile a video o salvabile su file... Facciamo che mettiamo ogni cifra ( che dovrà essere in base 10 ) in un elemento di un vettore di char...

Poi per stampare a video o su file aggiungiamo 0x30 ed abbiamo l'ASCII della cifra...

Si comunque anche in BCD va bene perchè non ricordo di preciso la connessione con l'ASCII però anche lì mi pare ci sia...

Grazie mille a tutti! Ciao!
Ciamiz
Avatar utente
bite
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3798
Iscrizione: sabato 19 maggio 2007, 22:10

Re: Conversione da binario a decimale

Messaggio da bite »

ciamiz ha scritto:
bite ha scritto:
ciamiz ha scritto: Ciao a tutti ragazzi!

Per prima cosa non pensate che sia la solita banalità del cambio di sistema numerico...

Io ho bisogno di convertire un numero binario con MILIONI di bit in formato decimale,
espressamente NON utilizzando la solita formula bit * 2^n...

Come posso fare?

P.S. Il programma è scritto in C e Asm x86...

Grazie mille a tutti! Ciao!
Ciamiz
Quindi tu hai una stringona di qualche milione di bit e vuoi ottenerne la rappresentazione decimale, ho capito giusto?

Potrebbe servirti il CORDIC, vedi qui ad esempio (ma c'è anche molta altra documentazione in rete).

Però sarebbe scomodo ruotare davvero una stringa di milioni di bit, dovresti usare un indice invece.

PS pura curiosità, da dove viene la stringona?

EDIT scusa, ho dato per scontata una cosa, per convertire immagino che tu divida ripetutamente per dieci e tenga i resti come cifre decimali, l'algoritmo CORDIC che ti ho linkato serve a dividere.
Scusami ma penso di essermi espresso male...

Io ho questa stringa (vettore) di n-milioni di bit che però sono "impacchettati" in "pacchetti" da 32 bit (variabile unsigned int in C)...
sì, l'avevo immaginato.
Ora facciamo finta che io abbia io abbia il valore binario di un int, voglio trasformarlo in decimale, faccio
bitn * 231 + bitn - 1 * 230 ...
Per trasformarlo in rappresentazione decimale puoi dividere il numero per 10, il resto è la cifra decimale meno significativa (la più a destra). Poi dividi di nuovo per dieci, il resto è la seconda cifra decimale da destra, e così via.

Effettuare divisioni su stringhe di bit così lunghe non è semplice. L'algoritmo CORDIC che ti ho indicato è una possibilità. C'è però da scrivere del codice.

In alternativa, potresti usare un CAS come Mathematica, Maple o forse anche Maxima (wxMaxima) che hanno già la possibilità di stampare in qualsiasi base numeri a precisione arbitraria. Ma in questo caso sarebbe più comodo usare il CAS per fare tutti i conti, non solo per visualizzare il risultato.
Il problema è che io avendo ipotizziamo 8.000.000 di bit quindi un vettore di usigned int con 250.000 elementi, non posso fare bit8.000.000 * 27.999.999!

Quindi chiedo nuovamente se è possibile, e se si come, posso convertire un numero binario con n-milioni di cifre in decimale cosicchè da poterlo salvare o stampare a video?!?

Grazie mille nuovamente a tutti! Ciao!
Ciamiz
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti