精度常用的資料結構的位元組數由平台決定,可以用sizeof()
方法檢視, 例如,在x86平台上,如下:
sizeof
(int);
//4sizeof
(short);
//2sizeof
(long);
//4sizeof
(float);
//4sizeof
(double);
//8sizeof
(char);
//1sizeof
(word)
;//2
sizeof
(dword)
;//4
具體可以參考文章c sizeof()用法彙總整形和字元型毫無疑問,但是浮點型的儲存卻是乙個問題,以x86平台和float為例為例,浮點型的儲存由三部分構成,依次是:符號位、指數字、有效位。
可以使用: 檢視浮點型資料的儲存方式
從高位到地位排列:1位符號位 + 8位指數為 + 23位尾數字,如下圖(以12.34為例)所示:
符號位:佔一位,1表示負數,0表示正數
指數字:佔8位,表示指數,計算時的基數為2
因為指數可以有正負,所以8位指數的範圍是:-128~127,因此,在計算時,8位二進位制轉換位轉換成十進位制後再減去127,即為指數。上圖中,指數字是:1000,0010,十進位制130,指數為3
尾數字:佔23位
計算方式從左到右依次位2的負冪運算,上圖中,尾數字是:100,0101,0111,0000,1010,0100,尾數字=1*2^-1 + 0*2^-2 + 0*2^-3 ...
,算出結果為:1.5425000190734863
綜上,最終表示的浮點數為:+1 * 2^3 * 1.5425000190734863
由計算方式可以看出,浮點數的儲存只是乙個近似數,故而在**中不能使用==來進行判斷
同理,double佔8個位元組,儲存方式:1位符號位 + 11位指數字 + 52位尾數字
從儲存方式可以看出,浮點數的儲存是使用科學計數法,因此小數精度由尾數字決定:
float:2^23 = 8388608,共7位,即最多儲存7位有效數字,即精度為6~7位有效數字
double:2^52,共16位,精度為15~16位有效數字
float 在記憶體中的儲存方式
float 在記憶體中的儲存方式 c語言中,對於浮點型別的資料採用單精度型別 float 和雙精度型別 double 來儲存,float資料占用32bit,double資料占用 64bit,我們在宣告乙個變數float f 2.25f的時候,是如何分配記憶體的呢?如果胡亂分配,那世界豈不是亂套了麼,...
float在記憶體中儲存方式
依據ieee規定 float在儲存中都分為三個部分 符號位 sign 0代表正,1代表為負 指數字 exponent 用於儲存科學計數法中的指數資料,並且採用移位儲存 尾數部分 mantissa 尾數部分 其中floa和doublet的儲存方式如下圖所示 8.25用十進位制的科學計數法表示就為 8....
float在記憶體中的儲存
以下內容來自於 1.十進位制轉二進位制 1.1整數 11 2 5 餘 1 5 2 2 餘 1 2 2 1 餘 0 1 2 0 餘 1 0結束 11二進位制表示為 從下往上 1011 1.2小數 0.9 2 1.8 取整數部分 1 0.8 1.8的小數部分 2 1.6 取整數部分 1 0.6 2 1....