圖解計算機中的數值范圍和浮點運算


寫在前面

在【程序員進階系列】專題的《圖解計算機中數據的表示形式》一文中,我們詳細的說明了在計算機中數據的表示形式。今天,我們繼續來說計算機中的數值范圍和浮點運算相關的知識。走起,繼續,我們一起進階,一起牛逼。

文章已收錄到:

https://github.com/sunshinelyz/technology-binghe

https://gitee.com/binghe001/technology-binghe

數值的表示范圍

在計算機中,碼制所表示的范圍,可以分為定點整數和定點小數。在定點數中,小數點是固定的。定點整數就是說小數點在最低位的后面,也就是在最右面,此時的小數點可以忽略不寫。定點小數就是小數點在最高位的前面,也就是在最左邊。

值得注意的是:在定點整數和定點小數中,小數點都不占位數。所以,小數點在定點整數和定點小數中不會影響數值的范圍。

我們可以將定點整數和定點小數的取值范圍總結成下表所示。

碼制 定點整數 定點小數
原碼 -(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表示機器的字長,也就是用多少位二進制數表示。

這張表小伙伴們不用死記硬背,說白了,這張表,冰河也記不住,那我們怎么辦呢?不慌,這里,我給大家舉一個例子。

例如,我們這里使用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,我拉你進群,一起交流技術,一起進階,一起牛逼~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM