今天再復習一下計算機組成原理的知識,好久不看,幾乎全忘了~^_#
float型浮點數占用四個字節,有如下格式:

符號位:0--->正;1--->負
指數位:采用移碼表示
尾數位:可表示
24位二進制位的精度
double型浮點數占用八個字節,有如下格式:

符號位:0--->正;1--->負
指數位:采用移碼表示
尾數位:可表示53位二進制位的精度
舉個例子:
比如120.5f:
若為float型,轉化成二進制科學計數法為:
1111000.1 = 1.1110001 * 26 = 1.11100010000000000000000 * 26
符號位為0
指數位為6,采用移碼表示則將6 + 127 = 133,即為10000101
尾數位為11100010000000000000000(一共23位,不夠23位的直接補0)
因此120.5f在內存中存儲實際為:0 10000101 11100010000000000000000
也就是:0x42f10000
若120.5f為double型,轉化為二進制科學計數法為:
1111000.1 = 1.1110001 * 26 = 1.1110001000000000000000000000000000000000000000000000 * 26
符號位為0
指數位為6,采用移碼表示則將6 + 1023 = 1029,即為10000000101
尾數位為1110001000000000000000000000000000000000000000000000(一共52位,不夠52位的直接補0)
因此120.5在內存中存儲實際為:0 10000000101 1110001000000000000000000000000000000000000000000000
也就是:0x405e200000000000
相信通過例子應該很容易明白內存中浮點數如何存儲的了~
可通過以下的例子進行驗證:
1 #include <cstdio>
2
3 int main()
4 {
5 float tf = 120.5f;
6 double td = 120.5;
7 int *pf = (int *)&tf;
8 long long *pd = (long long *)&td;
9 printf("%x\n", *pf);
10 printf("%llx\n", *pd);
11 return 0;
12 }
posted on 2011-04-07 00:08
myjfm 閱讀(1461)
評論(0) 編輯 收藏 引用 所屬分類:
c/c++基礎