2010-02-09 33 views
5

如何將雙精度值轉換爲二進制值。將雙精度值轉換爲二進制值

我有這樣的低於125252525235558554452221545332224587265一定的價值,我想將其轉換爲二進制format..so我保持它在雙然後試圖轉換爲二進制(1 & 0的)..我使用C#.NET

+0

你需要在你的問題上更具體一些。諸如編程語言,CPU,操作系統等的細節以及更多關於實際嘗試實現的內容將會產生更好的答案。 http://catb.org/~esr/faqs/smart-questions.html – 2010-02-09 08:38:46

回答

0

如果你的意思是你想自己做,那麼這不是一個編程問題。

如果你想讓電腦做到這一點,最簡單的方法是使用浮點輸入例程,然後以十六進制形式顯示結果。在C++:

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

您可能想要提及的是,8是針對特定數據類型的。我不認爲IEEE754 64位是由C標準強制的。 – paxdiablo 2010-02-09 07:18:09

11

好了,你沒有指定一個平臺,或者什麼樣的你感興趣的二進制值,但在.NET中有BitConverter.DoubleToInt64Bits,它可以讓你在IEEE 754位組成的價值非常簡單地。

在Java中,有Double.doubleToLongBits它做同樣的事情。

請注意,如果您有諸如「125252525235558554452221545332224587265」之類的值,那麼您獲得的信息比雙精度首先能準確存儲的更多。

0

雙值已經是一個二進制值。這只是您希望具有的代表性問題。在編程語言中,當你將它稱爲double時,那麼你使用的語言將以一種方式解釋它。如果你碰巧把同一塊內存調用爲int,那麼它就不是同一個數字。

所以這取決於你真正想要的......如果你需要將它寫入磁盤或網絡,那麼你需要考慮BigEndian/LittleEndian。

+0

我有一些像這樣下面的值125252525235558554452221545332224587265我想將其轉換爲二進制格式..所以我保持它在雙然後嘗試轉換爲二進制(1和0)..我使用C#.net – raj 2010-02-09 08:56:41

+0

順便說一句,該數字長度爲127位,因此只能用雙精度近似(很差)。 – 2010-02-09 13:39:57

6

在C語言中,你可以做到這一點,例如這種方式,這是一個典型的利用union構建的:

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

如果你堅持這樣的main()並運行它,它可能會打印這樣的事情:雖然這

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

注意,當然,是在其endianness平臺相關的。以上是來自在Sempron CPU上運行的Linux系統,即它是小端。

-1

對於這些龐大的數字(無法使用double精確呈現),您需要使用一些專門的類來保存所需的信息。

C#提供的十進制類:

十進制值類型表示十進制數範圍從正到79,228,162,514,264,337,593,543,950,335負79,228,162,514,264,337,593,543,950,335。十進制值類型適用於需要大量重要整數和小數位並且沒有舍入誤差的財務計算。十進制類型並不排除舍入的需要。相反,它最大限度地減少了四捨五入造成的錯誤。例如,下面的代碼產生的0.9999999999999999999999999999而不是1

如果你需要比這更大的精確度,你需要讓自己的類我猜的結果。這裏有一個整數:http://sourceforge.net/projects/cpp-bigint/,雖然它似乎是C++。

相關問題