一直以來,用到64位數時,在time_t, __int64 和 double 之間用強轉運算,
從來也沒有發現有什麼不妥,今天發現,原來自己漸漸的淡化了 浮點數 類型的內存分佈機制。
以下給以說明: C/C++的浮點數據類型有float和double兩種。
類型float大小爲4字節,即32位,內存中的存儲方式如下:
符號位(1 bit) 指數(8 bit) 尾數(23 bit)
類型double大小爲8字節,即64位,內存佈局如下:
符號位(1 bit) 指數(11 bit) 尾數(52 bit)
符號位決定浮點數的正負,0正1負。
指數和尾數均從浮點數的二進制科學計數形式中獲取。
如,十進制浮點數2.5的二進制形式爲10.1,轉換爲科學計數法形式爲(1.01)*(10^1),由此可知指數爲1,
尾數(即科學計數法的小數部分)爲01。
根據浮點數的存儲標準(IEEE制定),
float類型指數的起始數爲127(二進制0111 1111),
double類型指數的起始數爲1023(二進制011 1111 1111),
在此基礎上加指數,得到的就是內存中指數的表示形式。尾數則直接填入,如果空間多餘則以0補齊,如果空間不夠則0舍1入。所以float和double類型分別表示的2.5如下(二進制):
符號位 指數 尾數
0 1000 0000 010 0000 0000 0000 0000 0000
0 100 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
文章出處:http://www.diybl.com/course/3_program/c++/cppsl/2008629/129103.html