Pergunta

Eu sei como converter binário para decimal. Eu sei que pelo menos 2 métodos: mesa e poder; -)

Eu quero converter binário para decimal e imprimir este decimal. Além disso, eu não estou interessado neste `decimal '; Quero apenas para imprimi-lo.

Mas, como eu escrevi acima, eu sei apenas 2 métodos para binário converter para decimal e ambos necessários disso. Então, eu estou computação algum valor para 1 ou 0 em binário e adicioná-lo ao valor lembrado. Este é um lugar fino. Eu tenho um número realmente, realmente grande (1 e 64 zeros). Durante a conversão eu preciso colocar algum resultado intermediário em alguns 'variável'. Em C, I tem um tipo `int', que é apenas 4 bytes e não mais do que 10 ^ 11.

Então, eu não tenho memória suficiente para armazenar resultado intermedite ao converter de binário para decimal. Como escrevi acima, eu não estou interessado em que o decimal, eu só quero imprimir o resultado. Mas, eu não vejo quaisquer outras maneiras de resolver isso ;-( Existe alguma solução para "apenas imprimir" de binário?

Ou, talvez, eu deveria usar algo como BCD (Binary Coded Decimal) para representação intermediária? Eu realmente não quero usar isso, porque não é tão multi-plataforma (processadores da Intel têm um recurso interno, mas por outro eu vou ter de escrever própria implementação).

Eu contente de ouvir seus pensamentos. Obrigado por paciência.

Idioma:. C

Foi útil?

Solução

Maior tipo de dados integrante padrão é unsigned long long int - no meu sistema (32 bits Linux em x86) que tem faixa de 0 - 1.8 * 10 ^ 20, que não é o suficiente para você, então você precisa para criar seu próprio tipo (struct ou array) e escrever matemática básica (basicamente você só precisa de um complemento) para esse tipo.

Se eu fosse você (ou a memória não é um problema), eu usaria um array - um byte por dígito decimal em vez de BCD. BCD é mais compacto que armazena 2 dígitos decimais por byte, mas você precisa colocar muito mais esforço trabalhando com altos e baixos petiscos separadamente.

E para imprimir basta adicionar '0' (caráter, não dígitos) para cada byte de sua matriz e você terá uma seqüência de impressão.

Outras dicas

Eu recomendo usar tal como GMP (GNU multiprecision biblioteca) biblioteca. Você pode usar o tipo de dados mpz_t para grandes números inteiros, os vários rotinas de importação / exportação para obter os seus dados em um mpz_t e use mpz_out_str() para imprimi-lo em base 10.

Bem, ao converter de binário para decimal, você realmente não precisa de todos os bits binários, ao mesmo tempo. Você só precisa os bits que você está calculando o poder do e provavelmente uma variável dupla para manter os resultados. Você poderia colocar o valor binário em uma matriz, digamos i [64], iterate através dela, obter o poder, dependendo da sua posição e continuar a acrescentar para o dobro.

Convertendo para decimal realmente significa cálculo de cada potência de dez, então por que não apenas armazená-los em um array de bytes? Em seguida, a impressão é apenas loop através da matriz.

Não foi possível alocar memória para, digamos, 5 int de, e armazenar o seu número no início da matriz? Em seguida, iterar manualmente sobre a matriz em pedaços de tamanho int-. Talvez algo como:

int* big = new int[5];
*big = <my big number>;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top