2010-02-09 17 views
5

Come posso convertire il doppio valore in valore binario.convertire il valore doppio in valore binario

ho qualche valore come questo sotto 125252525235558554452221545332224587265 voglio convertire questo a binario format..so Sto mantenendo in doppia e poi cercando di convertire in binario (1 & 0 di) .. io sto usando C# .NET

+0

Devi essere un po 'più specifico nella tua domanda. Dettagli come linguaggio di programmazione, CPU, sistema operativo, ecc. E un po 'di più su ciò che stai effettivamente cercando di ottenere, daranno risposte molto migliori. http://catb.org/~esr/faqs/smart-questions.html –

risposta

0

Se vuoi dire che vuoi farlo da solo, allora questa non è una domanda di programmazione.

Se si desidera eseguire un computer, il modo più semplice è utilizzare una routine di immissione a virgola mobile e quindi visualizzare il risultato nella sua forma esadecimale. In C++:

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

Si potrebbe voler dire che l'8 è per un tipo di dati molto specifico. Non credo che IEEE754 64-bit sia richiesto dallo standard C. – paxdiablo

11

Beh, non è stato specificato di una piattaforma o di che tipo di valore binario che ti interessa, ma in .NET c'è BitConverter.DoubleToInt64Bits che consente di ottenere i bit IEEE 754 che compongono il valore molto facilmente.

In Java c'è lo Double.doubleToLongBits che fa la stessa cosa.

Si noti che se si dispone di un valore come "125252525235558554452221545332224587265", allora si dispone di più informazioni rispetto a un doppio può memorizzare con precisione in primo luogo.

0

Un valore doppio è già un valore binario. È solo una questione di rappresentazione che desideri che abbia. In un linguaggio di programmazione quando lo chiami doppio, la lingua che utilizzi la interpreterà in un modo. Se ti capita di chiamare lo stesso blocco di memoria e int, allora non è lo stesso numero.

Quindi dipende da ciò che si desidera veramente ... Se è necessario scriverlo su disco o in rete, è necessario pensare a BigEndian/LittleEndian.

+0

ho un valore come questo sotto 125252525235558554452221545332224587265 Voglio convertire questo in formato binario..so sto mantenendo in doppio e poi cercando di convertire in binario (1 & 0) .. sto usando C# .net – raj

+0

BTW, quel numero è lungo 127 bit, quindi può essere solo approssimato (male) con un doppio. –

6

In C, è possibile farlo per esempio in questo modo, che è un uso classico della union costrutto:

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]); 

Se ti infili questo in un main() ed eseguirlo, potrebbe stampare qualcosa di simile :

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

Nota però che questo, naturalmente, è dipendente dalla piattaforma nel suo endianness. Quanto sopra è da un sistema Linux in esecuzione su una CPU Sempron, cioè è little endian.

-1

Per questi numeri enormi (che non possono essere presentati con precisione utilizzando un doppio) è necessario utilizzare alcune classi specializzate per contenere le informazioni necessarie.

C# fornisce la classe decimale:

Il tipo di valore decimale rappresenta numeri decimali vanno da positivo a negativo 79.228.162.514.264.337.593.543.950.335 79.228.162.514.264.337.593.543.950.335. Il tipo di valore decimale è appropriato per i calcoli finanziari che richiedono un numero elevato di cifre integrali e frazionarie significative e nessun errore di arrotondamento. Il tipo decimale non elimina la necessità di arrotondare. Piuttosto, riduce al minimo gli errori dovuti all'arrotondamento. Ad esempio, il codice seguente produce un risultato di ,9999999999999999999999999999 piuttosto che 1.

Se avete bisogno di precisione più grande di questo, è necessario effettuare la propria classe immagino.Ce n'è uno qui per inti: http://sourceforge.net/projects/cpp-bigint/ anche se sembra essere per C++.

Problemi correlati