Pregunta

Yo sé cómo convertir binario a decimal. Conozco al menos 2 métodos: mesa y poder; -)

Quiero convertir binario a decimal e imprimir este decimal. Por otra parte, no estoy interesado en este `decimal '; Quiero sólo para imprimirlo.

Pero, como he escrito anteriormente, sé sólo 2 métodos para convertir binario a decimal y dos de ellos requiere la adición. Por lo tanto, estoy calculando un valor de 1 o 0 en binario y añadirlo al valor acordado. Este es un lugar delgada. Tengo un número muy-muy grande (1 y 64 ceros). Mientras que la conversión tengo que colocar algún resultado intermedio de alguna 'variable'. En C, tengo un tipo `int', que es de 4 bytes y no más de 10 ^ 11.

Por lo tanto, no tengo memoria suficiente para almacenar resultado intermedite mientras que la conversión de binario a decimal. Como he escrito anteriormente, no estoy interesado en ese decimal, sólo quiero imprimir el resultado. Sin embargo, no veo ninguna otra manera de resolverlo ;-( ¿Hay alguna solución a "sólo en la impresión" de binario?

O, tal vez, debería usar algo como BCD (decimal codificado en binario) para la representación intermedia? Realmente no quiero usar esto, porque no es tan multiplataforma (procesadores de Intel tienen una característica incorporada, pero por otra voy a tener que escribir propia aplicación).

Me alegra oír sus pensamientos. Gracias por la paciencia.

Idioma:. C

¿Fue útil?

Solución

El mayor tipo de datos integral estándar es unsigned long long int - en mi sistema (Linux de 32 bits en x86) rango que tiene 0 - 1.8 * 10 ^ 20, que no es suficiente para usted, por lo que necesita para crear su propio tipo (estructura o array) y escribir matemáticas básicas (básicamente sólo tiene una adición) para ese tipo.

Si fuera tú (y la memoria no es un problema), que haría uso de una matriz - un byte por dígito decimal en lugar de BCD. BCD es más compacto que almacena 2 dígitos decimales por byte pero hay que poner mucho más esfuerzo trabajar con altas y bajas para picar por separado.

Y para imprimir que acaba de añadir '0' (carácter, no dígitos) a cada byte de la matriz y se obtiene una cadena imprimible.

Otros consejos

I recomiendo usar una biblioteca tal como GMP (multiprecision biblioteca GNU). Se puede utilizar el tipo de datos mpz_t para grandes números enteros, los diversos rutinas de importación / exportación para obtener sus datos en un mpz_t, y luego usar mpz_out_str() imprimirlo en base 10.

Bueno, al convertir de binario a decimal, que realmente no necesita todos los bits binarios al mismo tiempo. Sólo necesita los bits se está calculando actualmente el poder de una variable y probablemente el doble para mantener los resultados. Se puede poner el valor binario en una matriz, digamos que [64], iterar a través de él, obtener la potencia en función de su posición y seguir añadiendo al doble.

La conversión a decimal realmente significa el cálculo de cada potencia de diez, ¿por qué no simplemente almacenarlos en una matriz de bytes? Luego la impresión es sólo bucle a través de la matriz.

No se pudo asignar memoria para que, digamos, 5 de int, y almacenar su número al comienzo de la matriz? Entonces iterar manualmente sobre la matriz en trozos-int tamaño. Tal vez algo como:

int* big = new int[5];
*big = <my big number>;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top