今天再復(fù)習(xí)一下計(jì)算機(jī)組成原理的知識,好久不看,幾乎全忘了~^_#
float型浮點(diǎn)數(shù)占用四個字節(jié),有如下格式:

符號位:0--->正;1--->負(fù)
指數(shù)位:采用移碼表示
尾數(shù)位:可表示
24位二進(jìn)制位的精度
double型浮點(diǎn)數(shù)占用八個字節(jié),有如下格式:

符號位:0--->正;1--->負(fù)
指數(shù)位:采用移碼表示
尾數(shù)位:可表示53位二進(jìn)制位的精度
舉個例子:
比如120.5f:
若為float型,轉(zhuǎn)化成二進(jìn)制科學(xué)計(jì)數(shù)法為:
1111000.1 = 1.1110001 * 26 = 1.11100010000000000000000 * 26
符號位為0
指數(shù)位為6,采用移碼表示則將6 + 127 = 133,即為10000101
尾數(shù)位為11100010000000000000000(一共23位,不夠23位的直接補(bǔ)0)
因此120.5f在內(nèi)存中存儲實(shí)際為:0 10000101 11100010000000000000000
也就是:0x42f10000
若120.5f為double型,轉(zhuǎn)化為二進(jìn)制科學(xué)計(jì)數(shù)法為:
1111000.1 = 1.1110001 * 26 = 1.1110001000000000000000000000000000000000000000000000 * 26
符號位為0
指數(shù)位為6,采用移碼表示則將6 + 1023 = 1029,即為10000000101
尾數(shù)位為1110001000000000000000000000000000000000000000000000(一共52位,不夠52位的直接補(bǔ)0)
因此120.5在內(nèi)存中存儲實(shí)際為:0 10000000101 1110001000000000000000000000000000000000000000000000
也就是:0x405e200000000000
相信通過例子應(yīng)該很容易明白內(nèi)存中浮點(diǎn)數(shù)如何存儲的了~
可通過以下的例子進(jìn)行驗(yàn)證:
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 閱讀(1478)
評論(0) 編輯 收藏 引用 所屬分類:
c/c++基礎(chǔ)