float和double的記憶體布局

2021-07-10 16:45:49 字數 877 閱讀 7422

已經有人寫好了,我就不寫了。

乙個人,只認識二進位制,他要表達十進位制中的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 符號位...