- Unsigned integer
- Signed integer
- Float — IEEE754
- Number operation and its implement
Number in computer
將數字(number)分成整數(integer)以及浮點數(Float)分別介紹。
Integer
Unsigned integer
若是要表達 Unsigned integer,我們可以用所有的硬體資源來表示,
然而,即使是所有的硬體也是以有限的電路來儲存一個數值。
因此數字能夠表達的範圍就會有所限制。
e.g :
Unsigned integer 在長度 n 所能表達的範圍為
[0,2^n-1]
Signed integer
不同於Unsigned integer,我們在表達Signed integer時,必須犧牲一些資源來表示 負數(negative number) 。
共有3種可以表達負數的方法 :
- Sign & magnitude
- 1’s complement
- 2’s complement
Sign & magnitude
犧牲第一個bit用來表達正、負,稱為 Signed bit。
有三個缺點 :
- 此種表示法會出現+0、-0,容易出錯
- 無法預先知道運算結果,所以執行運算時需額外步驟來設定Sign bit
- 犧牲1個bit來表示sign
Example
長度為3的bit string,使用 Sign & magnitude 所能表達的範圍 ?
由左圖觀察,我們可以得到 :
-3 ~+3
推廣到長度n ,犧牲第一個bit
所以為 ± n-1 長度為真正能表達數字的長度,需要再扣掉 0 。
因此 ± 2^(n-1)-1 為其表達範圍
Note.
Sign & magnitude 在長度 n 所能表達的範圍為 :
- 2^(n-1) -1 ~ 2^(n-1) -1
1’s complement
其負數的表達方式為 各個bit取其補數(complement)。
補數的取法 :
將其 binary number 的 1、0互換。
有兩個缺點 :
- 此種表示法也會出現+0、-0,容易出錯
- 有時需要做 "端位修正"
Example
長度為3的bit string,使用 1’s complement 所能表達的範圍 ?
範圍和Sign&magnitude一樣
Note.
1’s complement在長度 n 所能表達的範圍為 :
- 2^(n-1) -1 ~ 2^(n-1) -1
2’s complement
為現今的電腦所使用的負數表達法。
其取法有三種方式 :
- 1’s complement + 1
2. 特殊技巧 (快速簡單)
3. 公式
若負數的表達式為 Xn-1 Xn-2 … X1 X0
則其2’s complement 為 :
也就是 (-1)*MSB + (所有有1的 bits*其對應power之和)
Example
2’s complement 1010 轉換成 decimal
→ -2³+2¹ = -6 …#
最後我們也整理出2's complement所能表達的範圍 :
以3-bits 做例子:
Note.
2 ’s complement在長度 n 所能表達的範圍為 :
- 2^(n-1) ~ 2^(n-1) -1 [正數的一個位置用來表達 0]
Float
Float number 為實數(real number , R) 在電腦的表示方法 。
Float number 在電腦裡是使用 IEEE 754這個協定所定義出來 , 分成 3個欄位
定義如下 :
- Sign
- Exponential
- Fraction (mantissa)
而且依照float以及double,有不同的欄位長度 :
Single : sign(1)、exp(8)、mantissa(23)
Double : sign(1)、exp(11)、mantissa(52)
以下討論都依Single單精準度為準。
Bias notation
IEEE 754的Exponent欄位是使用 "Bias notation",
目的是用來快速比較用來快速比較指數。
其作法為將所有能表達的數全部先扣掉bias,而bias=2^(n-1)-1
下表中使用8-bit,所以bias=127。
Example
IEEE 754 Range
IEEE 754 捨去了一些bits來表示一些特殊目的的符號,eg : NaN,0,±∞
然後剩餘的位置可拿來表示"非正規化數" (denormalized number)
以下Table整理了其編碼情形 :
再整理了一樹狀分類 :
並且羅列幾個重要的數字A~H :
A : 最大正規化數
B : 最小正規化數
C : 最大非正規化數
D : 最小非正規化數
E : 最大正規化數
F : 最小正規化數
G : 最大非正規化數
H : 最小非正規化數