数值型数据的表示

又闹分手qwq想死啊(真分了 我这篇文章还没写完 - 还没写完 就又回来了QAQ开心 好好努力!) 

一个数值型数据的完整表示包含三方面:

(1)采用什么进位计数制,通俗地讲,就是逢几进几;

(2)如何表示一个带符号的数,即如何使符号数字化,这就涉及机器数的编码方法,常用的有原码和补码。

(3)小数点应该如何处理,有两种方法,即定点和浮点表示。

1.进位计数制:(S)r=XnR^n+Xn-1R^n-1+...X0R^0+X-1R^-1+X-2R^-2+.....X-mR^-m.

数的进位制涉及两个基本概念:基数r和各数位的权值r^i。它们是构成某种进位制的两个基本要素。基数r是某种进位制中会产生进位的数值,等于每个数位中允许的最大数码值加1。

在进位制中每个数位都有自己的权值,它是一个与所在数位相关的常数,称为该位的位权,简称为权。

二进制和八进制可以通过分段转换(3对1),十六进制和二进制(4对1)也是如此。

十六进制除了基本的(BC3.89)[16]这种表示,还有一种以H为后缀的标注方式。

二进制和十进制的转换是8421码。也是通过四位二进制位进行替换。

2.各种进位制之间的相互转换。

十进制整数转换为二进制整数:

(1)减权定位法

从高位起,从十进制数中逐渐分离出二进制位。

若转换后的二进制代码序列为XnXn-1...X1X0,则从高位起将十进制数依次与二进制数各位的权值进行比较,若够减,则对应位Xi=1,减去该位权值后继续往下比较;若不够减,则对应位Xi=0,越过该位后继续往下比较;如此反复进行,直到所有二进制位的位权都比较完毕为止。

(2)除基取余法

将二进制展开的多项式整数部分除以二进制的基数2,得到S/2=(Xn2^n-1+Xn-12^n-2+...X12^0)+X0/2.显然括号内的是除2操作后得到的商,而X0是余数。若余数为0,表明X0=0;若余数为1,则表明X0=1。继续对商除以基数2,可依此判定多项式的各项系数(X1~Xn)。

十进制小数转换为二进制小数:

(1)减权定位法:类似。

(2)乘基取整法:

S=X-1*2^-1+X-2*2^-2+....X-m2^-m

2S=X-1+(X-2*2^-1+.....X-m2^-m+1)。

显然,括号内仍为小数;若2S出现整数部分,则表明X-1为1;若2S仍为小数,则表明X-1为0.继续对小数部分乘以基数2,根据各次乘积是否出现整数部分,依次判定X-2~X-m。

二进制整数转换为十进制整数

(1)按权相加法:二进制数展开成多项式求和的结果。

(2)逐次乘基相加法:

S=Xn2^n+Xn-12^n-1+X12^1+X02^0

={[(Xn*2+Xn-1)*2+Xn-2]*2+...}*2+X0

从二进制的最高位开始,乘以基数2,然后与次高位也就是相邻低位相加;所得结果在乘以基数2,再与相邻低位相加;如此继续,直到加上最低位为止,所得就是最后结果。

二进制小数转换为十进制小数:

(1)按权相加法:如题。

(2)逐次除基相加法:

S=X-12^-1+X-22^-2+...+X-m2^m

=2^-1*{X-1+2^-1*[X-2+....2^-1*(X-m+1+2-1*Xm)]}

3.带符号数的表示

真值:在日常的书写习惯中,往往用正、负加绝对值表示数值,用这种形式表示的数值称为真值。

机器数:在计算机内部使用的,连同数符一起数字化了的数。

CPU硬件一般支持补码运算和原码运算。

(1)原码表示法

约定:让数码序列的最高位为符号位,符号位为0表示该数为正,为1表示该数为负。数码序列的其余部分为有效数值,用二进制数绝对值表示。

若定点小数的原码序列为X0.X1X2...Xn,则:

[X]原=

X,                 0<=X<1

1-X=1+|X|,   -1

若定点整数的原码序列为XnXn-1...X0,其中Xn表示符号位,则:

[X]原=

X                       0<=X<2^n

2^n-X=2^n+|X| -2^n

注意:若X=-1011,则5位字长:11011;8位字长:10001011;

(2)补码表示法

在有模运算中,一个负数可以用一个与它互为补码的正数来代替。

补码定点小数的表示范围为-1~+1,以2为模。

计算机的寄存器与运算部件都有一定的字长限制,如一定位数的计数器,在计满后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,相当于时钟例子中的模12.因此,计算机中的运算也是一种有模运算。

1.补码定义:

补码的统一定义式如下:[X]补=M+X(mod M)

模为M,X是真值;[X]补是数X的补码,或称为X对模M的补数,可简写为X补。

若X>=0,式中的模M可作为溢出量舍去。反之,则X补=M+X=M-|X|。

定点小数的补码定义式:若定点小数的补码序列为X0.X1X2...Xn,其溢出量为2^1(注意:符号位X0的权值是2^0),因此以2为模。

[X]补=

X,0<=X<1

2+X=2-|X|,-1<=X<0

定点整数也是如此。

需要注意的是:当机器数字长超过有效数值的位数时,高位部分补1。

由真值、原码转换为补码:

<1>正数的补码表示和原码相同。

<2>负数:符号位保持1不变,其余位变反,然后在末位+1.

PS:通常将除符号位外的有效数值部分称之为尾数。

<3>符号位保持为1不变,尾数部分自低位向高位,第一个1及以前的各低位0都保持不变,以后的各高位则按位变反。

由补码表示转换为原码与真值:

<1>[+0]原=0.000000

      [- 0]原=1.000000

它们的真值含义相同。

<2>对于小数原码,表示范围:-1

<3>符号位不是数值的一部分,是人为地约定“0正1负”。所以在原码运算中需将符号位与有效数值部分分开处理,也就是取数的绝对值进行运算(又称为无符号数运算),而把符号位单独处理。

<4>在补码中,数值0只有一种表示000000。

<5>负数补码的表示范围比原码稍微大一点,多一个组合。原码负数绝对值最大为-(2^n-1),补码表示中的绝对值最大负数是-2^n。其代码序列是100000.

(3)反码表示法

正数的与原码相同:负数反码的符号位为1,尾数由原码尾数逐位变反。

4.定点数

在计算机中,小数点位置固定不变的数叫做定点数。

(1)无符号定点整数

无符号定点整数由于没有符号位,全部数位都被用来表示数值,因此它的表示范围比带符号定点整数更大,且它的小数点隐含在最低位之后,在数码序列中并不存在。

对于某一种数的表示方法,有两项指标(XnXn-1.....X1X0)[分辨率表明了这种表示方法的绝对精度]:

典型值                真值               代码序列

最大正数          2^n+1-1          11111111

(分辨率)最小非零整数           1             00000001

(2)带符号定点整数

原码定点整数表示范围:-(2^n -1)~(2^n -1)

补码定点整数表示范围:-2^n~2^n-1

原码、补码定点整数分辨率:1

(3)带符号定点小数

原码:-(1-2^-n)~(1-2^n)

补码:-1~(1-2^-n)

分辨率:2^-n

如果某个数据既有整数又有小数,要把它规范成某种定点数,就需要在程序中设置比例因子,才能将它缩小为定点小数或扩大为定点整数。运算后,再根据比例因子与实际经历的运算操作,将所得到的运算结果还原为实际值。

定点数的表示范围有限,如果运算结果超出表示范围,称为溢出。大于最大正数,称为正溢。沿负的方向超出绝对值最大负数(或描述为小于定点数的最小值),称为负溢。如果比例因子选择不当,如在变为定点小数的时候缩小比例不足,运算就可能产生溢出。因此,计算机硬件应具有溢出判断功能,一旦产生溢出就可以立即转入溢出处理,调整比例因子。反之,在设置比例因子时,如果缩小比例过大,将会降低精度。

5.浮点数

(1)浮点数的表示形式(原理性)

先将数写成一种比例因子与尾数相乘的形式,而且比例因子采用指数形态。

N=+/-R^E*M.

式中,N为真值,R^E为比例因子,M是尾数。对于某种浮点格式,R固定不变且隐含约定,因此浮点数代码序列中只需分别给出E和M这两部分。

E是阶码,也就是比例因子R^E的指数值,为带符号定点整数,可用补码或移码表示。

若阶码为正值,则表明尾数M将被扩大若干倍;反之,表明尾数M将被缩小若干倍。

R是阶码的底数,与尾数M的基数相同。【对于某一种浮点数格式,R隐含约定】

M是尾数,是一个带符号的定点原码或补码小数。

为了充分利用尾数部分的有效位数,使表示精度尽可能高,以及确保任何一个数用浮点数形式表示时其尾数的代码表示具有唯一性,故一般都对尾数M有规格化要求:1/2<=|M|<1.

原码:最高有效位为1;补码:数符位+最高有效位=1

PS:-1/2对于补码而言,不是规格化尾数

6.移码

若用移码表示的浮点数阶码共用m+1位,其代码序列:XmXm-1.....X1X0,则:

X移=2^m+X;-2^m<=X<2^m

X是阶码的真值,2^m是数字位Xm的位权。X移相当于将真值X沿数轴正向平移2^m,所以形象地讲其称为移码。

PS:浮点数 分辨率:min(|M|)*R^(min.E)

7.IEEE754标准浮点格式

最高位S0是数符,其后是8位的阶码,以2为底,采用移码表示,但偏置量为127。

同时隐含约定尾数的最高数位为2^0,相当于尾数有24位。尾数真值=1+M

31   | 30       23 | 22       0

S0   |    阶码     |     尾数

要求用原码表示的尾数M必须满足0<=|M|<1(规格化要求)。

特殊情况:

1.阶码全为0,且尾数为0,浮点数F=0;

2.阶码各位全为0,尾数不是,F按非正规浮点数解码:阶码E的真值被解析为-126,M被解析为尾数实际值,不加1.

3.阶码E各位全为1且尾数M的各位全为0,浮点数=+00

4.阶码E各位全为1且尾数M的各位并不全为0时,F无效。

数值型数据涉及:进位制、带符号数、小数点:

某小数是定点小数,补码表示,二进制数。

浮点数:由两个定点数组成;阶码(补码)+尾数(补码);IEEE754则是:移码+原码(少一个绝对值1)

你可能感兴趣的:(心得)