我們都知道在計算機(jī)內(nèi)部數(shù)據(jù)的存儲和運算都采用二進(jìn)制,這是因為計算機(jī)是由很多晶體管組成妻柒,而晶體管只有兩種狀態(tài)概耻,恰好可以用二進(jìn)制的0和1表示权逗,并且采用二進(jìn)制可以使得計算機(jī)內(nèi)部的運算規(guī)則簡單,穩(wěn)定性高捣染。
在計算機(jī)有整數(shù)和實數(shù)骄瓣,而兩者在計算機(jī)中以二進(jìn)制存儲的規(guī)則又是大不相同的。
整數(shù)
計算機(jī)中將整數(shù)又分為無符號整數(shù)(unsigned)和有符號整數(shù)(signed)耍攘。
對于無符號整數(shù)而言榕栏,它的原碼畔勤,反碼,補(bǔ)碼都是相同的扒磁,直接采用其二進(jìn)制形式表示即可庆揪。
對與有符號整數(shù)而言,規(guī)定取最高位作為其符號位妨托,若最高位為0表示正數(shù)缸榛,否則為負(fù)數(shù),它的原碼兰伤,反碼内颗,補(bǔ)碼之間的關(guān)系是:反碼等于原碼除符號位全部取反;補(bǔ)碼等于反碼+1敦腔。
計算機(jī)中整數(shù)是以補(bǔ)碼形式進(jìn)行存儲的
原因有下:
- 能夠統(tǒng)一 +0 和 -0 的表示
- 對于有符號整數(shù)的運算能夠把符號位同數(shù)值位為一起處理
- 能夠簡化運算規(guī)則
只有用補(bǔ)碼表示起暮,+0和-0的表示形式才一致。正因為如此会烙,所以補(bǔ)碼的表示范圍比原碼和反碼表示的范圍都要大负懦,比如8byte用補(bǔ)碼能夠表示的范圍為-128127,0127分別用0000000001111111來表示柏腻,而-127-1則用1000000111111111來表示纸厉,多出的10000000則用來表示-128。因此對于任何一個n位的二進(jìn)制五嫂,假若表示帶符號的整數(shù)颗品,其表示范圍為-2^(n-1)2^(n-1)-1。
實數(shù)
目前所有c編譯器都采用IEEE所制定的標(biāo)準(zhǔn)浮點格式沃缘,即二進(jìn)制科學(xué)表示法存儲實數(shù)躯枢。
二進(jìn)制科學(xué)表示法的公式為:S=M*2^N ,主要由三部分構(gòu)成:符號位+階碼(N)+尾數(shù)(M)槐臀。對于float型數(shù)據(jù)锄蹂,其二進(jìn)制有32位,其中符號位1位水慨,階碼8位得糜,尾數(shù)23位;對于double型數(shù)據(jù)晰洒,其二進(jìn)制為64位朝抖,符號位1位,階碼11位谍珊,尾數(shù)52位治宣。
下面舉例說明:
float型數(shù)據(jù)125.5轉(zhuǎn)換為標(biāo)準(zhǔn)浮點格式
125二進(jìn)制表示形式為1111101,小數(shù)部分表示為二進(jìn)制為 1,則125.5二進(jìn)制表示為1111101.1侮邀,由于規(guī)定尾數(shù)的整數(shù)部分恒為1缆巧,則表示為1.1111011*2^6,階碼為6豌拙,加上127為133陕悬,則表示為10000101,而對于尾數(shù)將整數(shù)部分1去掉按傅,為1111011捉超,在其后面補(bǔ)0使其位數(shù)達(dá)到23位,則為11110110000000000000000
則其二進(jìn)制表示形式為
0 10000101 11110110000000000000000
double類型也是使用相同的方法轉(zhuǎn)換唯绍。