無符號數
指整個機器字長的全部二進制位均表示數值位,相當於數的絕對值。若機器字長為n+1位,則數值表示為:
X=X0X1X2...Xn 其中Xi={0,1},0<=i<=n 即X0*2^n + X1*2^(n-1) + X2*2^(n-2) + ... + Xn-1*2 + Xn
數值範圍是 0≤X≤2^(n+1) - 1
例如:1111表示15。
帶符號數
最高位被用來表示符號位,而不再表示數值位 。
例如:1111 是 -7
定點整數
小數點位固定在最後一位之後稱為定點整數。若機器字長為n+1位,數值表示為:
X=X0X1X2...Xn,其中Xi={0,1},0≤i≤n 即(-1)^X0 * (X1*2^(n-1) + X2*2^(n-2) + ... + Xn-1*2 + Xn)
數值範圍是 -(2^n-1)≤X≤2^n-1
例如:1111表示-7。
定點小數
小數點固定在最高位之後稱為定點小數。若機器字長為n+1位,數值表示為:
X=X0.X1X2...Xn,其中Xi={0,1},0≤i≤n (這裡X0不表示數字,只表示符號,若X0=0,則代表X=0.X1X2...Xn,X0=1,則代表-0.X1X2...Xn)。
即X=X0.X1X2...Xn代表的小數為 (-1)^X0 * (X1*2^(-1) + X2*2^(-2) + ... + Xn-1*2^(-n+1) + Xn*2^(-n))
數值範圍是 -(1-2^(-n))≤X≤1-2^(-n)
例如:1111表示-0.875
(定點小數也被用在浮點數的尾數(Mantissa)部分)
原碼錶示
原碼是用機器數的最高一位代表符號,以下給出數值絕對值的表示方法。其定義為:
整數:
[X]原=0,X (0≤ x<2^n)
[X]原=10^n-X (-2^n<X≤0)
小數:
[X]原=X (0≤X<1)
[X]原=1-X (-1<X≤0)
這裡X是數的實際值(真值),[X]原為原碼錶示的機器數。
例如:真值X=+1001,[X]原=01001;真值X=-1001,[X]原=10000-(-1001)=11001;真值X=-0.1001,[X]原=1-(-0.1001)=1.1001。
原碼的性質:
⒈ 符號位+數的絕對值。
⒉ 0有兩個編碼。
⒊ 加減運算規則複雜,乘除運算規則簡單。
⒋ 表示簡單,易於和真值之間進行轉換。
原碼的運算:
加法:
先判斷符號位,若相同,絕對值相加,結果符號位不變;若不同,絕對值大的數減去絕對值小的數,符號位和絕對值大的數相同。
[X]原=00010,[Y]原=01010,X+Y=00000+1010+0010=01100;[X]原=10010,[Y]原=01010,X+Y=00000+1010-10=101010。
減法:
將減數符號取反,然後將被減數和符號取反的減數相加。
[X]原=10010,[Y]原=01010,X-Y=10010+11010=10000+0010+1010=11100。
乘法(原碼一位乘):
是模擬豎式手算的方法。引入一個值為部分積(初值為0)。符號位是被乘數和乘數符號位的異或值。之後檢視乘數(符號位以外)從低向高的每一位,若為1,部分積(對齊最高位)加被乘數(符號位以外),並右移一位;若為0,部分積加0,右移一位。
例如:[X]原=11101,[Y]原=01011。X*Y:符號位S=1⊕0=1
則X*Y=110001111。
除法(交替加減法):符號位為被除數和除數符號位異或獲得。之後被除數減除數(補碼錶示),當餘數為正時,商“1”,餘數左移一位減除數;當餘數為負時,商“0”,餘數左移一位,加除數。
例如:[X]原 = 0.1001,[Y]補= 0.1011,X/Y:
餘數r0<0,商0
商0,r和q左移一位
加y
餘數r1>0,商1
商1,r和q左移一位
減y
餘數r2>0,商1
商1,r和q左移一位
減y
餘數r3<0,商0
商0,r和q左移一位
加y
餘數r4>0,商1
X/Y 的商 [Q]原 = 0.1101,餘數[R]原 = 0.0001 。
補碼錶示
補碼定義為:
整數:
[X]補=X (0≤X<2^n)
[x]補=2^(n+1)+X (-2^n<X≤0 mod 2^(n+1)(意味相對與2^(n+1)做補))
小數:
[X]補=X (0≤X<1)
[x]補=2+X (-1<X≤0 mod 2(意味相對與2做補))
例如:真值X=+1001,[X]補=01001;真值X=-1001,[X]補=100000+(-1001)=100000-1001=10111;真值X=-0.1001,[X]補=2+(-0.1001)=10-0.1001=1.0111。
補碼的性質:
⒈ 機器數和真值的關係為:[X]補=2*符號位+X
⒉ [X]補和真值的關係:X=[X]補 - 2*X0=X0.X1X2...Xn - 2*X0=-X0 + 0.X1X2...Xn
⒊ 0有唯一的編碼。
⒋ 兩數補碼加法,把符號位和數值位等同處理,結果的符號位與數值位都正確。
⒌ 補碼數的算數移位
把[X]補的符號位和數值位一起右移一位並保持原符號位的值不變,可用來實現除法功能(除以2)。
變形補碼,又稱模4補碼,把普通補碼由模2改為模4,其中雙符號位00代表正,11代表負,01上溢,10下溢。
反碼錶示
反碼是用機器數的最高位代表符號,數值位是對負數各位取反的表示方法,定義為:
整數:
[X]反=X (0≤X<2^n)
[X]反=(2^(n+1)-1)+X (-2^n<X≤0 mod (2^(n+1)-1))
小數:
[X]反=X (0≤X<1)
[X]反=(2-2^(-n))+X (-1<X≤0 mod (2-2^(-n)))
例如:真值X=+1001,[X]反=01001;真值X=-1001,[X]反=10110;真值X=-0.1001,[X]反=1.0110。
反碼的性質:
0有2個編碼。
計算機中,較少使用反碼 。
移碼
移碼定位為:
[X]移=2^n+X (-2^(-n)≤X<2^n)
當真值用補碼錶示時,由於符號位和數值部分一起編碼,與習慣上的表示法不同,因此人們很難從補碼的形式上直接判斷其真值的大小。
十進制數X=31,對應的二進制數為+11111,則[X]補=011111;十進制數X=-31,對應的二進制數為-11111,則[X]補=100001,看上去好像100001>011111,其實正好相反。如果我們對每個真值加上一個2^n,X=11111加上2^5可得11111+100000=111111;X=-11111加上2^5可得-11111+100000=000001,這樣就可以直接通過二進制代碼比較大小。
移碼的性質:
⒈ 最高位為符號位。
⒉ 0有唯一編碼。
⒊ 保持了數據原有的大小順序。
⒋ 移碼只用於浮點數的階碼部分,故只用於表示整數。
比較
數值的表示範圍 :浮點表示法所能表示的數值範圍將遠遠大於定點表示法。
精度 :對於字長相同的定點數與浮點數來說,浮點數雖然擴大了數的表示範圍,但這是以降低精度為代價的,也就是數軸上各點的排列更稀疏了。
數的運算 :浮點運算要比定點運算複雜。
溢出處理 :定點運算時,當運算結果超出數的表示範圍,就發生溢出;而在浮點運算時,運算結果超出尾數的表示範圍卻並不一定溢出,只有當階碼也超出所能表示的範圍時,才發生溢出。
定點數與浮點數
計算機處理的數值數據多數帶有小數,小數點在計算機中通常有兩種表示方法,一種是約定所有數值數據的小數點隱含在某一個固定位置上,稱為定點表示法,簡稱定點數;另一種是小數點位置可以浮動,稱為浮點表示法,簡稱浮點數 。