負數和小數點在計算機中的二進制表示


一、負數的表示:

在計算機中,負數以其正值的補碼形式表示,補碼為該數的反碼加一。以下是補碼的概念。

1.源碼

  一個整數,按照絕對值大小轉換成的二進制數,稱為原碼

在4字節中,0110 是 6 的原碼。

2.反碼

  將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼

0110 的反碼是 1001

3.補碼

  二進制的反碼加1,得到該二進制數的補碼,1010則為6在二進制中的補碼

1001 的補碼是 1010

4.負數運算

  在二進制中計算5-3,減號表示為加該二進制數的補碼

 

5.補碼為何是反碼+1

  • 計算機的補碼也相當於算術里的補數

  要了解補數,首先該了解的概念。是指一個計量系統的計數范圍,如時鍾等,它的計量范圍是0~11,模 = 12。計算機也是有一個計量范圍,即都存在一個“模”,32位計算機的計量范圍是2^32,模 = 2^32。“模”是計量器產生“溢出”的量,它的值在計量器上表示不出來,在12小時的時鍾里,12點就是0點。

 

  • 補數二者相加等於模的數為補數

  在以模為12的系統中,加9和減3效果是一樣的,因此凡是減3運算,都可以用加9來代替。對“模”12而言,9和3互為補數(二者相加等於模)。

  所以我們可以得出一個結論,即在有模的計量系統中,減一個數等於加上它的補數,從而實現將減法運算轉化為加法運算的目的。

# 按以上理論,減一個數等於加上它的補數,所以
 5 - 3
 # 在4位字節,模=16
 5 + (16 - 3)   //模減去3則為3的補數
 # 用二進制表示則為:
 0101 + (10000 - 0011)
 # 等價於
 0101 + ((1 + 1111) - 0011)
 # 等價於
 0101 + (1 + (1111 - 0011))
 # 等價於
 0101 + (1 + 1100) // 括號內是3(0011)的反碼+1,正是補碼的定義
 # 等價於
 0101 + 1101
 # 所以從這里可以得到
 -3 = 1101
 # 即 `-3` 在計算機中的二進制表示為 `1101`,正是“ -3 的正值 3(`0011`)的補碼(`1101`)”。
 # 最后一步 0101 + 1101 等於10010
 #在4位字節中為0010

 

 二、小數點的表示:

1.浮點數表示

  • IEEE754 標准

  計算機是無法識別 . 號的,那么二進制小數中的點需要被保存下來,它是如何保存的呢?

1985年,隨着IEEE標准754的推出,制定出了浮點數的統一表示以及運算的標准

  目前,所有的計算機都支持這個標准,為科學應用程序在不同機器上的可移植性鑒定了基礎

  • 標准公式

   V = (-1)s * M * 2E     V=(-1)sign * mantissa * base * exponent 

  s:符號  s取1時代表負,取0代表正

  m:尾數  小數點后面的數,1< m < base,在二進制中,m永遠 1 < m <2

  e:指數   以10為底的指數

  base:進制數/基數,在計算機中一般為2

  • 轉換例子

  例如16.125

  十進制轉換為二進制,整數位與小數位分開轉換,16轉為10000

  0.125采用新的轉換二進制方法,如下:

將小數位不斷乘2,每次取其整數部位數的0或1,直到小數位變成0
0.125 * 2 =0.25  ———>  0
0.250 * 2 =0.50  ———>  0
0.500 * 2 =1.00  ———>  1

  得出0.125二進制表示為001,因此16.125二進制表示為10000.001

  使用IEEE754標准表示為 16.125=1.0000001*24

  1.0000001為尾數,2為基數,4為指數

 

2.浮點數存儲

  • 單精度浮點數

  以float類型為例,它是單精度存儲類型,占4個字節,一個字節有8位,因為它占32位內存空間

  

 

   將16.125=10000.001=1.0000001*24的二進制存儲到float中,s為0,E為4,M為1.0000001

  值得注意的是,指數E有一個偏移值為127,正數則是加,負數則減;尾數M因在二進制中始終 1< M <2,所以M的第一位數永遠為1,需在計算機中省略掉

  指數127+4=131轉為二進制10000011,尾數為0000001,需補齊23位,填入內存中為:

  

  單精度類型float的取值范圍是-3.4e38~3.4e38,有效數字為7,由於最高位不為1,可能是8

  • 雙精度浮點數

  以double類型為例,它是雙精度存儲類型,占8個字節,擁有64位內存

  

 

  其存儲方式與單精度相同,只是存儲的大小和精度有所改變

  雙精度類型float的取值范圍是-1.7e308~1.7e208,有效數字為15~16

 

3.定點數與浮點數區分

  計算機中常用的數據表示格式有兩種,一是定點格式,二是浮點格式,浮點格式應用較多

  • 定義

  定點數浮點數,是指在計算機中一個數的小數點的位置是固定的還是浮動的

  • 區分

  1.如果一個數中小數點的位置是固定的,則為定點數;如果一個數中小數點的位置是浮動的,則為浮點數

  2.定點格式可表示的數值的范圍有限,但要求的處理硬件比較簡單。而浮點格式可表示的數值的范圍很大,但要求的處理硬件比較復雜

  3.采用定點數表示法的計算機稱為定點計算機,采用浮點數表示法的計算機稱為浮點計算機。定點機在使用上不夠方便,但其構造簡單造價低,一般微型機和單片機大多采用定點數的表示方法。浮點機可表示的數的范圍比定點機大得多,使用也比較方便,但是比定點機復雜,造價高,在相同的條件下浮點運算比定點運算速度慢

  • 表示法

  通常將定點數據表示成純小數或純整數。為了將數表示成純小數,通常把小數點固定在數值部分的最高位之前;而為了把數表示成純整數,則把小數點固定在數值部分的最后面

 

 三、總結

1.負數在計算機中以補碼形式存儲,補碼類似算術里的補數,二進制中補碼為反碼+1

2.小數點在計算機中以浮點形式存儲,采用國際通用IEEE754標准,公式為V = (-1)s * M * 2E

3.除了浮點數還需要了解有定點數,顧名思義,小數點位置固定。

 

參考原文:https://blog.csdn.net/leonliu06/article/details/78685248

     https://blog.csdn.net/baidu_35812312/article/details/79203971
      


免責聲明!

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



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