[教學] 計概 二進位整數表示方法(補數系統)
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.65.87
一般二進位整數表示方法有幾種:
1.無號數
2.有號數
(1) sign bit表示法
(2) 1's compliment(1的補數)
(3) 2's compliment(2的補數)
----
1.
就我們一般學的二進位,因為無號數,所以只能表示正數
eg:
5 = 0101 ; 11 = 1011 (以4 bits為例)
4 bits所能表示資料的範圍 0 ~ 2^4 - 1
n bits 0 ~ 2^n - 1
2.
(1) sign bit表示法
這個也很直觀,最左邊的位元不表示數值,拿來表示正負號
eg:
5 = 0101 ; -5 = 1101 (以4 bit為例)
4 bits所能表示資料的範圍 - (2^3 - 1) ~ (2^3 - 1)
n bits - (2^(n-1) - 1) ~ (2^(n-1) - 1)
(2) 1's compliment(1的補數)
如果是正數,就轉成一般二進位就好,如果是負數,再把它取1的補數
eg:
5 = 0101 ; -5 = 1010 (以4 bit為例)
4 bits所能表示資料的範圍 - (2^3 - 1) ~ (2^3 - 1)
n bits - (2^(n-1) - 1) ~ (2^(n-1) - 1)
(3) 2's compliment(2的補數)
如果是正數,就轉成一般二進位就好,如果是負數,再把它取2的補數
eg:
5 = 0101 ; -5 = 1011 (以4 bit為例)
4 bits所能表示資料的範圍 - 2^3 ~ (2^3 - 1)
n bits - 2^(n-1) ~ (2^(n-1) - 1)
而現今最常用的都是二的補數表示法,因為二的補數表示法可以比其他有號數表示法
多表示一個數。(請看n bits所能表示的範圍,自己做個比較就會發現了)
原因是因為 sign表示和1的補數表示法都會存在+0和-0 ,可是這是兩個相同的東西
所以就會浪費掉一個表示的空間,2的補數無法表示-0,所以負數可以多表示一個
至於,大家會問是不是最左邊是1就一定是負數?!
答案是對的,因為正數最左邊一定是0,取二的補數,一定會變成1。
此外,二的補數表示法,要轉成十進位方法有兩種。
1.先把二的補數表示式轉成一般二進位,再轉成十進位,再依正負號,決定正負
eg:
1011 (2's) = - 0101 (2) = -5 (10)
2.公式解:
假設此二進位為 Bn Bn-1 ...B1 B0 n-1
那此二進位的十進位會等於 (- 2^n x Bn) + Σ (B (k) x 2^k)
k=0
證明我就省略了。這個方法很好用!!所以值得背起來(對正負數都可直接轉換)
eg:
1011 (2's) = - 2^3 x 1 + 2^2 x 0 + 2^1 x 1 + 2^0 x 1 = -5 (負數)
0011 (2's) = - 2^3 x 0 + 2^2 x 0 + 2^1 x 1 + 2^0 x 1 = 3 (正數)
--
推 inisilver:推@@ 01/15 23:31
推文自動更新已關閉
留言