真值(即:帶有正負號的數值是真值,用0或1來表示正負號的數值是機器數,例如:-10011為真值,110011為機器數)
以下X表示數據的真值。
1. 原碼表示法
最簡單且直觀的機器數表示法,其最高位為符號位(0為正,1為負),數值部分與真值的數值相同
設X為純小數,一位符號位,n個數值位,則
[X]
原=
|
{ |
X 0=<X<=1-2
n-1
1-X=1+|X| -(1-2n-1)=<X<=0 |
例如:x=-0.1001,那么先把它轉化成機器數為:1.1001
根據公式:[X]原=1-X=1-(-0.1001)=1+0.1001=1.1001=1+|-0.1001|
[+0.8125]原=(0.1101000)2
[-0.8125]原=1-(-0.8125)=(1.0000000)2+(0.1101000)2=(1.1101000)2
設X為純整數,一位符號位,n個數值位,則
[X]
原=
|
{ |
X 0=<X<=2
n-1
2n-X=2n+|X| -(2n-1)=<X<=0 |
例如:機器字長n=8
[+35]原=(00100011)2
[-35]原=27-(-35)=(10000000)2+(00100011)2=(10100011)2
2.補碼表示法
變形補碼:即用兩個二進制位來表示數字的符號位,其余與補碼相同。變形補碼,用"00"表示正,用"11"表示負,也稱為模4的補碼。
用變形補碼進行加減運算時,當運算結果的符號位出現"01"或者"10"時,則表示產生溢出。變形補碼的最高位(第一個符號位)總是表示正確的符號,
比如"00"、 "01"分別表示 正數、正溢出(上溢),"11"、"10"表示負數、負溢出(下溢)。
1、產生01的情況: 補碼: 0 111+ 0 010----1 001
兩個正數相加出現了負數,明顯有誤,就是說此時產生了上溢出(注:補碼運算時符號位也參與運算)
變形補碼: 00 111+ 00 010----01 001
此時讀數時,由於左邊的符號位是0,所以表示正數,讀成+9,而不像模二補碼中變成了-7
2、產生10的情況: 補碼: 1 001+ 1 010---- 10 011
溢出一位后,結果變成了0 011,兩個負數相加出現了正數,明顯有誤,就是說此時產生了下溢出(注:補碼運算時符號位也參與運算)
變形補碼: 11 001+ 11 010----110 011
溢出一位后,結果變成了10 011,此時讀數時,由於左邊的符號位是1,所以表示負數,讀成-19,而不像模二補碼中變成了+3
(注:產生01和10時,讀數時右邊那一位符號也要算在數字里面)