計算機中的數據存儲和數據運算

前幾天看了一本計算機導論的書,對於我這個並非計算機科班出生的人很有啓發,想迫不及待的把這些學到的東西總結起來,前面看過的主要內容是數據存儲和數據運算,這篇博客也主要講的是數據存儲和數據運算。


數據在計算機中以多種形式存在,如文字,視頻,音頻,圖像,數字等,在計算機工業中使用多媒體來定義包含數字,文本,圖像,音頻和視頻的信息!

那麼計算機內部的數據是怎麼來的?所有計算機外部的數據類型的數據都是採用統一的數據表示法轉換後存入計算機中,當數據從計算機輸出時再還原回來,這種通用的格式稱爲位模式。

所謂的位模式,是指一個由0和1組成的序列,如果說要存儲一個16位的位模式,那麼我們需要16個電子開關,如果要存儲1000個位模式,每個16位,那麼我們需要16000個電子開關。通常長度爲8的位模式被稱爲一個字節,有了位模式,那麼無論什麼數據類型的數據都可以以相同的形式存儲到計算機中,下面,對文字,視頻,音頻,圖像,數字這些類型的數據是如何存儲在計算機中進行一一闡述!

1.數字

數字在存儲到計算機中之前將被轉換爲二進制系統,那麼存儲普通的不帶符號的小數大家自然都懂,直接轉換爲二進制就行了,如果是帶符號的小數呢?這就存在兩個待解決的問題:<1>如何存儲數字的符號?<2>如何顯示十進制小數點?

對於小數點,計算機使用兩種不同的表示方法:定點和浮點。第一種用於把數字作爲整數存儲(沒有小數),第二種用於把數字作爲實數存儲(帶有小數部分);

先討論存儲整數:

整數可以被當做小數點位置固定的數字,因此,定點表示法用於存儲整數(小數點位置固定的表示法),對於一個整數來說,小數點固定在最右方,在這這種表示法中,小數點是假定的,但並不存儲。但是,用戶有時候會將整數作爲小數部分爲零的實數進行存儲,例如,整數過大以至於無法作爲整數來存儲(書上的這句話一直不太理解),爲了更有效的利用計算機的內存,無符號和有符號的整數在計算機中的存儲方式是不同的。

<1>無符號表示法:

*首先將整數變爲二進制數。

*如果二進制位數不足n位,那麼在二進制整數的左邊補0,使它的總位數爲n,如果大於n位,那麼整數無法存儲,導致溢出。

例:將7存儲在8位存儲單元中:得到的結果是00000111

溢出:

例:將20存儲在4位存儲單元中:輸入的是20,但是輸出的結果並不是20,而是4,因爲4位存儲單元最多隻能存儲0到15這16個數,而如果溢出,則會進行下一個循環。

無符號整數的應用:

1.計數

2.內存尋址,有些計算機語言,在一個存儲單元中存儲了另外一個存儲單元的地址,地址都是從0(存儲器的第一個字節)開始到整個存儲器的總字節數的正數

3.爲其他數據類型排序

<2>符號加絕對值表示法

符號加絕對值表示法在存儲整數中並不常見,但該格式用於在計算機中存儲部分實數。

在這種表示法中,最左邊一位用於定義整數的符號,0表示正數,1表示負數

例如:將+28存儲在8位的存儲單元中:最後的結果是00011100

溢出:

同無符號表示法的溢出

符號加絕對值表示法的應用:

1.存儲部分實數

2.用於採樣模擬信號

<3>2進制補碼錶示法

幾乎所有的計算機都用二進制的補碼錶示法來存儲位於n位存儲單元的有符號整數,這個方法的無符號整數的有效範圍被截取爲兩半,一般用於存儲正數,一般用於存儲負數,如果是一個4位的存儲單元,該範圍是0000到1111,這個範圍被分爲兩半,0000到0111和1000到1111,前半部分表示的是正數,後半部分表示負數。與符號加絕對值表示法一樣,首位表示數字的符號,0表示正數,1表示負數。所以這個範圍能表是的整數是從-8到7.

如何獲得一個二進制數的補碼?

1.從數的最右邊開始複製,直到遇到1停止,左邊的其他位全部取其反碼

2.先將數取反碼,然後再加1

以二進制補碼格式來存儲整數:

*將整數變爲二進制數

*如果整數是正數或0,以其原樣存儲;如果是負數,計算機取其補碼存儲

以二進制補碼格式還原整數:

*如果最左位是0,不進行操作,如果是1,那麼取其補碼

*計算機將該整數轉換成十進制

也許有些同學會有疑問:爲什麼計算機存儲整數的時候不直接用符號加絕對值法存儲而要用相對複雜的補碼形式來存儲呢?下面我們來推演一下

假設有這樣一個運算:10-8,8位位模式來存儲,10的二進制表示法表示的結果是:00001010,-8的二進制表示法用符號加絕對值法表示出來是:10001000,用補碼錶示法表示出來的結果是:01111000,那麼分別用二進制的加法來運算,得到的結果分別是10010010,00000010.前者轉換爲10進製爲-18,後者轉換爲十進制是2,那麼顯然後者是更加符合邏輯的。

二進制補碼錶示法的溢出:

同上面兩種方法的溢出,循環!

下面開始討論實數的存儲:

首先聲明的是:儘管固定小數點表示法可以用來表示實數,但結果不一定精確或達不到需要的精度。所以要使用另外一種方法:即浮點表示法:

在浮點數表示法中,實數被分爲三個部分來存儲:符號,位移量,和定點數

比如:0.0000000304,先用科學計數法來表示:3.04*10^-8;這三部分爲符號(+),位移量(-8)以及定點部分(3.04)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章