c語言中基本資料型別有:整型(char short int)浮點型(float duble)
這篇文章主要**浮點數在記憶體中的表示方法,剛學c語言時,一直都在想乙個問題,為啥int,float型別都是佔據4個位元組,在計算機內部都是二進位制來表示的,為啥兩者表示的範圍能夠不同?
主要參考資料《深入理解計算機系統》
c語言中,浮點資料型別在記憶體中的儲存分為:符號位、指數字、尾數三部分
如表: 型別
符號位指數字
尾數float
1(第31位)
8位(第23-30)
23double
1(第63位)
11位(52-62位)
52 可以看出,float,double這兩類資料型別在記憶體中的表示形式是一樣的。但是double型所占用的位元組數為8,而float型位元組數為4,可見double型變數的表示範圍(精度)更大(更高)
如何計算乙個float型別資料在記憶體中的具體二進位制表示呢?
first:將float資料轉換成二進位制數
second:採用科學計算法對二進位制數進行表示
third:計算指數偏移值,對於float型別指數偏移值為127,double型為1023
例項:計算浮點數6.5在計算機中的二進位制表示
6.5==》轉換為二進位制110.1===》科學計數1.101*(2^2)===》符號位0,指數字127+2=129==>10000001,尾數101
所以記憶體中6.5的表示為:0 10000001 10100000000000000000000-》0x40d00000
程式驗證:
float i=6.5;
unsigned int *p=(unsigned int*)&i;
printf("%f\n",i);
printf("0x%x\n",*p);
需要理解float和int在記憶體中的表示方法是不同的,由於float的表示方法較為複雜,所以運算速度較慢。且float的表示是一種近似表示,尤其在後續中如果用到float型別資料進行比較時,一定要注意。
C語言 浮點數在記憶體中的表示
單精度浮點數 1位符號位 8位階碼位 23位尾數 雙精度浮點數 1位符號位 8位階碼位 52位尾數 實數在記憶體中以規範化的浮點數存放,包括數符 階碼 尾數。數的精度取決於尾數的位數。比如32位機上float型為23位 double型為52位。單精度float型儲存在記憶體中的大小為4個位元組,即3...
浮點數的表示
在定點數表示中存在的乙個問題是,難以表示數值很大的資料和數值很小的資料。例如,電子的質量 9 10 28克 和太陽的質量 2 1033克 相差甚遠,在定點計算機中無法直接表示,因為小數點只能固定在某乙個位置上,從而限制了資料的表示範圍。為了表示更大範圍的資料,數學上通常採用科學計數法,把資料表示成乙...
浮點數的表示
日期 2010年6月 6日 1.前幾天,我在讀一本c語言教材,有一道例題 includevoid main void 執行結果如下 num的值為 9 pfloat的值為 0.000000 num的值為 1091567616 pfloat的值為 9.000000 我很驚訝,num和 pfloat在記憶...