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