在【程序員進階系列】專題的《圖解計算機中數據的表示形式》一文中,咱們詳細的說明了在計算機中數據的表示形式。今天,咱們繼續來講計算機中的數值範圍和浮點運算相關的知識。走起,繼續,咱們一塊兒進階,一塊兒牛逼。git
文章已收錄到:程序員
https://github.com/sunshinelyz/technology-binghegithub
https://gitee.com/binghe001/technology-binghe算法
在計算機中,碼制所表示的範圍,能夠分爲定點整數和定點小數。在定點數中,小數點是固定的。定點整數就是說小數點在最低位的後面,也就是在最右面,此時的小數點能夠忽略不寫。定點小數就是小數點在最高位的前面,也就是在最左邊。微信
值得注意的是:在定點整數和定點小數中,小數點都不佔位數。因此,小數點在定點整數和定點小數中不會影響數值的範圍。3d
咱們能夠將定點整數和定點小數的取值範圍總結成下表所示。blog
碼制 | 定點整數 | 定點小數 |
---|---|---|
原碼 | -(2n-1 -1) ~ +(2n-1 -1) | -(1-2-(n-1)) ~ +(1-2-(n-1)) |
反碼 | -(2n-1 -1) ~ +(2n-1 -1) | -(1-2-(n-1)) ~ +(1-2-(n-1)) |
補碼 | -2n-1 ~ +(2n-1 -1) | -1~ +(1-2-(n-1)) |
移碼 | -2n-1 ~ +(2n-1 -1) | -1~ +(1-2-(n-1)) |
表格中的n表示機器的字長,也就是用多少位二進制數表示。token
這張表小夥伴們不用死記硬背,說白了,這張表,冰河也記不住,那咱們怎麼辦呢?不慌,這裏,我給你們舉一個例子。get
例如,咱們這裏使用4位機器字長來表示,爲了理解方便,這裏我用四個方框來表示4位二進制數。
數學
默認最高位爲符號位,以下所示。
這裏咱們先用4位二進制數表示定點整數,則最小值爲1111,最大值爲0111。
最小值1111表示以下。
其轉換成10進制數爲-7。
最大值0111表示以下。
其轉換爲10進制數爲7。
這樣,咱們使用4位二進制數表示的範圍,則能夠計算出結果爲:-7 ~ 7。也就是 -(24-1 - 1) ~ +(24-1 -1),因此,當使用n位二進制數表示數值的範圍時,咱們能夠得出數據的表示範圍爲: -(2n-1 - 1) ~ +(2n-1 -1)
因此,咱們根本就不須要記住定點整數和定點小數的取值範圍表,只須要簡單的使用一個實際的二進制位進行驗算便可得出正確的結果數據。好比,我這裏以4位二進制位進行驗算舉例。
還有一點須要注意的是:補碼和移碼比原碼和反碼少一個數,就是-0。另外,驗證定點小數和驗證定點整數的方式相同,小夥伴們可自行驗證定點小數的值,這裏,我就再也不贅述。
若是咱們使用8位二進制數表示,則定點整數的取值範圍爲:
1111 1111 ~ 0111 1111 轉換爲十進制數就是: -127 ~ 127,將二進制數轉換爲補碼爲:1000 0000 ~ 0111 1111。
其中,-128的補碼爲1000 0000是人爲規定的。
若是使用8位二進制數表示,則定點小數的取值範圍爲:
-0.1111 1111 ~ +0.11111111,補碼的範圍爲: -1~ + +0.11111111。
其中,-1的補碼爲1000 0000是人爲規定的。
首先,咱們先來看下浮點數的表示形式,浮點數的表示形式以下,
N = 尾數 * 基數指數
對於浮點數來講,咱們最常說的就是圓周率 π,數學上常使用3.14來表示π的值,若是使用科學計算法的話,咱們可使用形如3.14 * 103 這樣的數來表示。其中,在3.14 * 103中,3.14表示尾數,10表示基數,3表示指數。
另外,3.14 * 103 能夠寫成多種形式,好比能夠寫成 0.314 * 104,也能夠寫成0.0314 * 105。
浮點數在計算機中的表示中,階碼是帶符號的純整數,尾數爲帶符號的純小數。浮點數的表示格式以下所示。
一個數的浮點數表示不是惟一的。當小數點的位置發生改變時,階碼也會相應的改變。可使用多個浮點形式表示同一個浮點數。浮點數的數值範圍主要由階碼決定,數值的精度則是由尾數決定的。
運算的過程要依次經歷對階、尾數計算和結果格式化三個階段。
例如計算:3.14 * 103 + 1.5 * 105的結果數據。
首先,咱們須要先進行對階操做,這裏有個原則就是小數向大樹看齊,這裏咱們須要將3.14 * 103進行對階操做,轉化成0.0314 * 105,而後與1.5 * 105進行相加操做,得出結果數據1.5314 * 105。
接下來,咱們再來看看浮點數的特色。
浮點數的主要特色以下所示。
好了,今天就到這兒吧,我是冰河,你們有啥問題能夠在下方留言,也能夠加我微信:sun_shine_lyz,我拉你進羣,一塊兒交流技術,一塊兒進階,一塊兒牛逼~~