已經有人寫好了,我就不寫了。
乙個人,只認識二進位制,他要表達十進位制中的9,需要寫成1001,換算公式為1*2^3+0*2^2+0*2^1+1*2^0=9。
他要表達十進位制中的9.5,需要寫成1001.1,換算公式為1*2^3+0*2^2+0*2^1+1*2^0+1*2^(-1)=9.5。
如果有乙個二進位制為1001.1001,它是十進位制中的1*2^3+0*2^2+0*2^1+1*2^0+1*2^(-1)+0*2^(-2)+0*2^(-3)+1*2^(-4)=9.5625。
****************************************=
double佔64bit,其中符號位1位,指數字11位,小數部分52位,指數偏移量是1023。
小數部分是指【yyy.***】,其中***是52個零壹字串。
當偏移量為正值(大於0)時,小數點右移偏移量個位置。
當偏移量為負值(小於0)時,小數點左移偏移量個位置。
當偏移量為0時,小數字的值=(0/1)*2^(-1)+(0/1)*2^(-2)+(0/1)*2^(-3)+...+(0/1)*2^(-52)。
當我們把2^(-52)作為乙個單位時,小數字的值就是***(共52個x的零壹字串)個單位。
所以,小數字的值value=multiple*2^(-52)。
所以multiple=value*2^52。
因為2^52=......370500,所以,value為0.01的倍數的時候,multiple都是整數。
所以,double可以完美的表示所有的兩位小數。
但是double d=17.7時,vs2013顯示的是17.699999999999999,這很令人詫異。
***********************************=
float和double型別的記憶體分布
c c 的浮點資料型別有float和double兩種。型別float大小為4位元組,即32位,記憶體中的儲存方式如下 符號位 1 bit 指數 8 bit 尾數 23 bit 型別double大小為8位元組,即64位,記憶體布局如下 符號位 1 bit 指數 11 bit 尾數 52 bit 符號位...
float和double型別的記憶體分布
c c 的浮點資料型別有float和double兩種。型別float大小為4位元組,即32位,記憶體中的儲存方式如下 符號位 1 bit 指數 8 bit 尾數 23 bit 型別double大小為8位元組,即64位,記憶體布局如下 符號位 1 bit 指數 11 bit 尾數 52 bit 符號位...
float和double型別的記憶體分布和比較方法
c c 的浮點資料型別有float和double兩種。型別float大小為4位元組,即32位,記憶體中的儲存方式如下 符號位 1 bit 指數 8 bit 尾數 23 bit 型別double大小為8位元組,即64位,記憶體布局如下 符號位 1 bit 指數 11 bit 尾數 52 bit 符號位...