一、負數的表示:
在計算機中,負數以其正值的補碼形式表示,補碼為該數的反碼加一。以下是補碼的概念。
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