Domanda

Io so come convertire binario a decimale. So di almeno 2 metodi: tavolo e di potenza; -)

voglio convertire binario a decimale e stampare questa decimale. Inoltre, io non sono interessato a questo `decimali '; Voglio solo stamparlo.

Ma, come ho scritto sopra, so solo 2 metodi per convertire binario a decimale e ciascuno di essi richiesto aggiunta. Quindi, io sto calcolando un valore di 1 o 0 in binario e aggiungerlo al valore ricordato. Questo è un luogo sottile. Ho un veramente-veramente grande numero (1 e 64 zeri). Mentre la conversione Ho bisogno di mettere un po 'di risultato intermedio in qualche 'variabile'. In C, ho un tipo `int', che è 4 byte e non più di 10 ^ 11.

Quindi, non ho memoria sufficiente per memorizzare risultato intermedite durante la conversione da binario a decimale. Come ho scritto in precedenza, non sono interessato a quel decimale, voglio solo stampare il risultato. Ma, non vedo altri modi per risolverlo ;-( C'è qualche soluzione a "basta stampare" dal binario?

O, forse, dovrei usare qualcosa come BCD (Binary Coded Decimal) per rappresentazione intermedia? Io davvero non voglio usare questo, perche' non è così multi-piattaforma (processori Intel hanno un built-in funzione, ma per altro ho bisogno di scrivere una propria implementazione).

lo farei felice di sentire i vostri pensieri. Grazie per la pazienza.

Lingua:. C

È stato utile?

Soluzione

Il più grande tipo di dati integrato di serie è unsigned long long int - sul mio sistema (a 32 bit di Linux su x86) gamma ha 0-1,8 * 10 ^ 20, che non è abbastanza per voi, quindi è necessario creare un tipo (struct o array) e scrivere la matematica di base (in pratica è sufficiente un'aggiunta) per quel tipo.

Se fossi in te (e la memoria non è un problema), mi piacerebbe utilizzare una matrice - un byte per cifra decimale piuttosto che BCD. BCD è più compatto in quanto memorizza 2 cifre decimali per byte, ma è necessario mettere molto più sforzo di lavoro con alti e bassi stuzzichini separatamente.

E per stampare basta aggiungere '0' (carattere, senza cifre) per ogni byte dell'array e si ottiene una stringa stampabile.

Altri suggerimenti

Mi consiglia di utilizzare una libreria come GMP (GNU multiprecisione biblioteca). È possibile utilizzare il tipo di dati mpz_t per i grandi numeri interi, le varie routines di import / export per ottenere i dati in un mpz_t, e quindi utilizzare mpz_out_str() per stamparlo in base 10.

Bene, durante la conversione da binario a decimale, davvero non hanno bisogno di tutti i bit binari contemporaneamente. Hai solo bisogno i bit che si sta calcolando il potere di e, probabilmente, una doppia variabile per contenere i risultati. Si potrebbe mettere il valore binario in una matrice, permette di dire che ho [64], scorrere attraverso di essa, ottenere il potere a seconda della sua posizione e continuare ad aggiungere alla doppia.

La conversione in decimale veramente mezzi di calcolo ogni potenza di dieci, quindi perché non solo conservare questi in un array di byte? Poi la stampa è solo scorrendo la matrice.

Non potevi allocare memoria per, diciamo, 5 Int di, e conservare il numero all'inizio della matrice? Poi scorrere manualmente sulla matrice in blocchi int dimensioni. Forse qualcosa di simile:

int* big = new int[5];
*big = <my big number>;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top