黃偉 趙旭
摘 要:這篇文章主要講解數(shù)據(jù)是如何存儲在計(jì)算機(jī)中的,它會分別講解整數(shù)和小數(shù)是分別以什么形式存儲在計(jì)算機(jī)中。讓讀者深刻了解存儲機(jī)制,揭開疑問。
關(guān)鍵詞:整數(shù)存儲字節(jié);小數(shù)存儲;浮點(diǎn)數(shù)
有很多人都不了解在計(jì)算機(jī)中到底是如何存儲數(shù)據(jù)的,而我也是很好奇其存儲機(jī)制,才閱讀了很多篇文章,才了解數(shù)據(jù)是如何存儲在計(jì)算機(jī)中的,而我將用一篇文章簡單易懂的總結(jié)出數(shù)據(jù)的存儲方式。首先你要知道數(shù)據(jù)存儲分為兩個部分,一個是整數(shù)的存儲,一個是小數(shù)的存儲,整數(shù)存儲,只需要考慮正數(shù)和負(fù)數(shù)的存儲。而小數(shù)的存儲在計(jì)算機(jī)中其實(shí)是無法精確表示的,因此小數(shù)存儲就涉及到了精確度的表示。下面就分別敘述整數(shù)存儲和小數(shù)存儲。
一、整數(shù)存儲
1.1字節(jié):
因?yàn)橛?jì)算機(jī)只能存儲二進(jìn)制即0或者1,而1位則是代表一個數(shù),在計(jì)算機(jī)中一個字節(jié)包含8位即1個byte類型,1位則叫1 bit 。因此一個字節(jié)包含有2^8即256個數(shù)。
1.11存儲負(fù)數(shù)
1.因?yàn)橛?jì)算機(jī)只存儲二進(jìn)制不能表示負(fù)數(shù),而一個字節(jié)有256位數(shù)所以根據(jù)鐘表原理來存儲負(fù)數(shù),即256個數(shù)正數(shù)存儲1-127負(fù)數(shù)存儲-1到-128 還有0 因此一共有256個數(shù)正好對稱。
2.計(jì)算機(jī)表示用最高位來表示符號位即0表示正數(shù),1表示負(fù)數(shù)。
3.計(jì)算機(jī)用補(bǔ)碼來表示數(shù),正數(shù)的補(bǔ)碼為其本身,而負(fù)數(shù)的補(bǔ)碼則是原碼取反加1
負(fù)數(shù)補(bǔ)碼例如:-1 的原碼1000 0001? 反碼1111 1110? 補(bǔ)碼為1111 1111
例如:-127 原碼1111 1111? 反碼 1000 0000 補(bǔ)碼1000 0001
所以127的表示則是為0111 1111 而當(dāng)其加1時為1000 0000此時其值為-128 加1 為1000 0001即為-127
二、小數(shù)存儲
在小數(shù)存儲方式中有兩種存儲方式,一種是定點(diǎn)數(shù),一種是浮點(diǎn)數(shù),這篇文章著重將浮點(diǎn)數(shù)。
2.1浮點(diǎn)數(shù)
浮點(diǎn)數(shù)的由來
因?yàn)槎c(diǎn)數(shù)還是無法準(zhǔn)確的表示小數(shù),因此推出浮點(diǎn)數(shù),浮點(diǎn)數(shù)也無法準(zhǔn)確的推出小數(shù),但很接近。浮點(diǎn)數(shù)是根據(jù)IEEE-754標(biāo)準(zhǔn)來存儲的,如下有幾點(diǎn)規(guī)范
1. 浮點(diǎn)數(shù)包含3部分:符號位,指數(shù)和尾數(shù),尾數(shù)又可稱之為有效數(shù)
2. 浮點(diǎn)數(shù)用二進(jìn)制表示,因此尾數(shù)也是用二進(jìn)制表示
3. 指數(shù)可正可負(fù),因此根據(jù)IEEE-754標(biāo)準(zhǔn)規(guī)定float轉(zhuǎn)出來的值-127,即所為的漂移值:127,double的漂移值是1023
4. float是用4個字節(jié)進(jìn)行表示的稱之為單精度,其表示的第一位是符號位,之后的8位是指數(shù) 再之后的23位是尾數(shù)
5. double使用8個字節(jié)來表示的稱之為雙精度,其表示的第一位是符號位,之后的11位是指數(shù),在之后的52位則是尾數(shù)
浮點(diǎn)數(shù)表示
18.625
18用二進(jìn)制表示為10010
0.625用二進(jìn)制為0.101
所以18.625為10010.101
用浮點(diǎn)數(shù)來存儲18.625為1.0010101*2^4因?yàn)榉栁灰欢?所以省略所以尾數(shù)為001 0101
因?yàn)橹笖?shù)轉(zhuǎn)出來之后需要-127因此這里需要+127 即131這里用8位表示256個正數(shù),用二進(jìn)制表示1000 0011
所以浮點(diǎn)數(shù)是0 1000 0011 (指數(shù))001 0101 0000 0000 0000 0000(尾數(shù)) 其就是18.625
反推:其數(shù)0為正數(shù) 指數(shù)131-127為4 尾數(shù) 為1.0010101
1+1`*`2^-3+1`*`2^-5+2^-7=1+0.125+0.03125+0.0078125=1.1640625`*`2^4=18.625
為什么計(jì)算機(jī)中不能存儲準(zhǔn)確的小數(shù)卻能夠輸出精確的小數(shù)?
因?yàn)樵?java 中其小數(shù)表示形式為3f333333而當(dāng)計(jì)算時才會用到浮點(diǎn)數(shù)
參考文獻(xiàn):
[1]王移芝,羅四維.大學(xué)計(jì)算機(jī)基礎(chǔ)教程.北京:高等教育出版社,2004
[2]楊振山,龔沛曾.大學(xué)計(jì)算機(jī)基礎(chǔ)(第四版).北京:高等教育出版社,2004
[3]馮博琴,大學(xué)計(jì)算機(jī)基礎(chǔ).北京:高等教育出版社,2004
[4]李秀等,計(jì)算機(jī)文化基礎(chǔ)(第5版).北京:清華大學(xué)出版社,2005
[5] June jamrich Parsons Dan Oja.計(jì)算機(jī)文化.北京:機(jī)械工業(yè)出版社,2001
[6]山東省教育廳組編.計(jì)算機(jī)文化基礎(chǔ).東營:中國石油大學(xué)出版社,2006