机器数与真值
把符号“数字化”的数称为机器数,而把带“+”、“-”符号的数称为真值。
原码表示法
原码是机器数中最简单的一种表示形式,0表示整数,1表示负数。
约定整数的符号位和数值位之间用“逗号”隔开。
在原码中,0有两种表示形式:“+0”和“-0”是不一样的。
反码表示法
若真值为负数,那么反码为原码中除符号位外,其余所有位取反。
若真值为整数,那么反码等于原码
补码表示法
若真值为负数,那么补码为反码+1,即对原码取反加1.
若真值为整数,那么补码等于反码等于原码。
补码的性质:
1.补码的0表示唯一。
2.负数补码的符号位永远是1,0和正数补码的符号位永远是0。
3.补码表示的范围,在最小值处可以额外减-1。
例如8位有符号补码的表示范围是[-128,127]。
移码表示法
移码为对补码的符号位取反得到。
小数的表示
在计算机中,小数点有两种方式表现:“定点表示”、“浮点表示”。
用定点表示的数称为定点数,用浮点数表示的数称为浮点数。
定点表示
对于定点表示,有两种格式,如下图所示:
当小数点位于数符和第一数值位之间时,机器内的数为纯小数。
当小数点位于数值位之后时,机器内的数为纯整数。
采用定点数的机器称为:“定点机”。
数值部分的位数n决定了定点机中数的表示范围。
若机器数采用原码,小数定点机中数的表示范围是:“-(1-)”~“(1-)”,整数定点机中数的表示
范围是:“-(-1)”~“(-1)”。
在定点机中,当机器处理的数不是纯小数或者纯整数时,会发生溢出。
浮点表示
对于不是纯整数或者纯小数的数,我们需要用浮点数来表示。
浮点数即小数点的位置可以浮动的数。
通常,浮点数的表示方式是:
其中,S为尾数(可正可负),j为阶码(可正可负),r是基数(或基值)。
浮点数的表示方法有很多种,例如:
另外,将尾数最高位为1的浮点数称为格式化数。
如:N = 0.110101 * 就是浮点数的格式化格式。
ps:(中的10指的是二进制代码“10”,换算成人类意义上的数值是2)。
浮点数的表示形式
采用这种数据格式的机器称为浮点机:
阶符和阶码的位数m合起来反映了浮点数的表示范围及小数点的实际位置。
尾数是小数,其位数n反映了浮点数的精度。
尾数的符号反映了浮点数的正负。
浮点数的表示范围
当浮点数阶码大于最大阶码时,称为上溢。
当浮点数阶码小于最小阶码时,称为下溢。
浮点数的规格化
为了提高浮点数的精度,其尾数必须是规格化数。
如果一个浮点数不是规格化数,就要通过修改阶码并同时左右移动位数的方法来变成规格数。
将非规格化数转换为规格化数的过程称为规格化。
当基数为2时,尾数最高位为1的数为规格化数。
规格化时,尾数左移一位,阶码减1(这种规格化称为向左规格化,简称为左规)。
【可以理解为小数点右移一位,阶码减1】
位数右移一位,阶码加1(这种规格化称为向右规格化,简称为右规)。
【可以理解为小数点左移一位,阶码加1】
当基数为4时,尾数的最高两位不全为0的数为规格化数。
尾数左移两位,阶码减一。
尾数右移两位,阶码加一。
当基数为8时,尾数的最高三位不全为0的数为规格化数。
尾数左移三位,阶码减一。
尾数右移三位,阶码加一。
例题:
1.设浮点数字长为16位,其中阶码5位(含1位阶符),尾数11位(含1位数符),将十进制数“+
”写成二进制定点数和浮点数,并分别写出它在定点机和浮点机中的机器数形式。
答:
x的二进制形式为:0.0001 1010 00
定点数表示:0.001 1010 00
浮点数规格化表示:0.1101 0000 00 *
在定点机中,x原=x反=x补 = 0.0001 1010 00
浮点机中:
x原 = 1 0011 0 1101 0000 00或1,0011;0.1101000000
x反 = 1 1100 0 1101 0000 00或1,1100;0.1101000000
x补 = 1 1101 0 1101 0000 00或1,1101;0.1101000000
ps:可以发现阶码为负数的时候,只需要对阶码部分数据取反+1,而数值位部分不变。
当数值位符号为负数时,只需要对数值位部分取反+1,而阶码部分不变。
IEEE 754标准【极其重要】
现代计算机中,浮点数一般采用IEEE 754标准。
形式如下:
其中,S为数符,表示浮点数的正负。
阶码用移码表示。
也可以理解为:
符号位 阶符 阶码 尾数 总位数
1 1 7 23 32
尾数部分通常是规格化表示,即非“0”的有效位最高位总是“1”。
即:
此外,还有一种计算IEEE 754的方法,在这里我们使用例题给出: