真值(即:带有正负号的数值是真值,用0或1来表示正负号的数值是机器数,例如:-10011为真值,110011为机器数)
以下X表示数据的真值。
1. 原码表示法
最简单且直观的机器数表示法,其最高位为符号位(0为正,1为负),数值部分与真值的数值相同
设X为纯小数,一位符号位,n个数值位,则
[X]原=
|
{ |
X 0=<X<=1-2n-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<=2n-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时,读数时右边那一位符号也要算在数字里面)