2010-02-09 9 views
5

¿Cómo puedo convertir el valor doble en valor binario?convertir el valor doble en el valor binario

tengo algún valor como esto más adelante 125252525235558554452221545332224587265 quiero convertir esto en format..so binaria deposito a diario en doble y luego tratar de convertir a binario (1 & de 0) .. estoy usando C# .NET

+0

Debe ser un poco más específico en su pregunta. Detalles como el lenguaje de programación, la CPU, el sistema operativo, etc. y un poco más sobre lo que realmente está tratando de lograr generará respuestas mucho mejores. http://catb.org/~esr/faqs/smart-questions.html –

Respuesta

0

Si quiere decir que quiere hacerlo usted mismo, esta no es una pregunta de programación.

Si desea hacer que una computadora lo haga, la manera más fácil es usar una rutina de entrada de coma flotante y luego mostrar el resultado en su forma hexadecimal. En C++:

double f = atof ("5.5555555555556E18"); 
unsigned char *b = (unsigned char *) &f; 
for (int j = 0; j < 8; ++j) 
    printf (" %02x", b [j]); 
+0

Es posible que desee mencionar que el 8 es para un tipo de datos muy específico. No creo que IEEE754 de 64 bits sea obligatorio por el estándar C. – paxdiablo

11

Bueno, no se ha especificado una plataforma o qué tipo de valor binario que le interesa, pero en .NET hay BitConverter.DoubleToInt64Bits que te permite obtener en el IEEE 754 bits que el valor muy facilmente.

En Java hay Double.doubleToLongBits que hace lo mismo.

Tenga en cuenta que si tiene un valor como "125252525235558554452221545332224587265", entonces tiene más información de la que un duplicador puede almacenar con precisión en primer lugar.

0

Un valor doble ya es un valor binario. Es solo una cuestión de la representación que desea que tenga. En un lenguaje de programación cuando lo llames doble, el idioma que uses lo interpretará de una manera. Si llama a la misma porción de memoria un int, entonces no es el mismo número.

Por lo tanto, depende de lo que realmente desee ... Si necesita escribirlo en el disco o en la red, entonces debe pensar en BigEndian/LittleEndian.

+0

tengo un valor como este a continuación 125252525235558554452221545332224587265 quiero convertir esto a formato binario ... así que lo estoy manteniendo en doble y luego tratando de convertir a binario (1 & 0) .. estoy usando C# .net – raj

+0

BTW, ese número tiene 127 bits de largo, por lo que solo se puede aproximar (mal) con un doble. –

6

En C, se puede hacer, por ejemplo, de esta manera, lo que es un uso clásico de la union construcción:

int i; 
union { 
double x; 
unsigned char byte[sizeof (double)]; 
} converter; 

converter.x = 5.5555555555556e18; 

for(i = 0; i < sizeof converter.byte; i++) 
    printf("%02x", converter.byte[i]); 

Si usted se pega esto en un main() y ejecutarlo, puede imprimir algo como esto :

~/src> gcc -o floatbits floatbits.c 
~/src> ./floatbits 
ba b5 f6 15 53 46 d3 43 

Nota sin embargo que esto, por supuesto, depende de la plataforma en su endianness. Lo anterior es de un sistema Linux que se ejecuta en una CPU de Sempron, es decir, es un pequeño endian.

-1

Para estos números enormes (que no se pueden presentar con precisión utilizando un doble), necesita utilizar alguna clase especializada para contener la información necesaria.

C# proporciona la clase decimal:

El tipo de valor decimal representa números decimales que van desde positivo a negativo 79.228.162.514.264.337.593.543.950.335 79.228.162.514.264.337.593.543.950.335. El tipo de valor Decimal es apropiado para cálculos financieros que requieren grandes cantidades de dígitos integrales y fraccionarios significativos y sin errores de redondeo. El tipo Decimal no elimina la necesidad de redondeo. Más bien, minimiza los errores debidos al redondeo. Por ejemplo, el siguiente código genera un resultado de 0.9999999999999999999999999999 en lugar de 1.

Si necesita una precisión más grande que esto, es necesario para hacer su propia clase supongo.Aquí hay uno para ints: http://sourceforge.net/projects/cpp-bigint/ aunque parece ser para C++.

Cuestiones relacionadas