第2章 基本概念
-
一个数值型数据的完整表示需三个方面?
-
权、基数?
-
真值?机器数的定义?分类?
-
数的定点表示与浮点表示?
1.进位计数制
1.数制的基和权
在任一数制中,每一个数位上允许使用的记数符号的个数被称为该数制的基数。 每1位都对应1个表示该位在数码中的位置的值,这个值就称为数位的权值w。
2.十进制计数
(1) 基数为十(计数的符号个数):0~9。 (2) 权值w:10i
如果有m位整数,n位小数。则:
3.二进制
1.二进制:二进制,在计算机内部,数据都是以二进制的形式存储的。用0、1两个数字来表示数值,这就是二进制(Binary)。例如,数字 0、1、10、111、100、1000001 都是有效的二进制。
(1) 基数为二(计数的符号个数):0~1。 (2) 权值w:2^i
如果有m位整数,n位小数。则:
2.特点
(1)二进制数只有0和1两个数码,故可以用晶体管的通、断或脉冲的有无来表示一位二进制数。 (2)二进制数运算规则简单,其特点是逢二进一,借一当二
4.八进制
八进制,Octal,缩写OCT或O,采用0、1、2、3、4、5、6、7八个数字,逢八进一。
(1) 基数为八(计数的符号个数):0~7。 (2) 权值w:8^i
如果有m位整数,n位小数。则:
5.十六进制
十六进制,是计算机中数据的一种表示方式,它是由0-9和A-F组成,字母不区分大小写。
(1) 基数为十六(计数的符号个数):0~F。 (2) 权值w:16^i
如果有m位整数,n位小数。则:
6.进制的转换
(1) 十进制数转换为二进制数
整数部分:除以2取余数,直到商为0为止。
小数部分:乘以2取整数,直到小数为0(或到达要求精度)为止。
(2)二进制转十进制
把二进制数按权展开,相加即为十进制数;
10010110=1X2^7 + 0X2^6 + 0X2^5 + 1X2^4 + 0X2^3 + 1X2^2 + 1X2^1 + 1X2^0 = 150
(3) 二进制数转换为八进制数
从小数点起三位一组,整数部分不够三位的向前添0,小数部分不够三位的向后添0。
(4) 二进制数转换为十六进制数
从小数点起四位一组,整数部分不够四位的向前添0,小数部分不够四位的向后添0。
(5) 八进制数和十六进制数转换为二进制数
3、4的逆变换
(6) 十进制数转换为八进制数、十六进制数
整数部分除以8、16取余数,直到商为0止。小数部分乘以8、16取整数,直到小数为0或到要求精度止。
(7) 八进制数、十六进制数转换为十进制数
按权位展开求和
辗转相除法,更相减损术
7.真值和机器数
若以正号“+”和负号“-”来表示有符号的二进制数,称为符号数的真值。
符号数的真值+0.1011;-0.1011,这种表示方法不能直接用于计算机中。只有使符号数值化以后,才可以在计算机中使用,符号位习惯以0表示正数,以1表示负数。
计算机中使用的符号数称为机器数。 如+1011表示为01011,而-1011表示为11011。
乘法运算实际上是作移位加法运算;除法运算则可用移位减法来完成。
注意:作减法时,必须先比较两个数绝对值的大小,将绝对值大的数减去绝对值小的数,最后再在运算结果前加上正确的符号。故作减法运算所需电路复杂,耗时长。
8.原码
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
字长为8位的原码 表示范围为:-127~+127
[+127]原 =0 1111111
[–127]原 =1 1111111
数值“0”有两种原码形式:
[+0]原=0 0000000
[-0 ]原=1 0000000
1)定点小数的原码定义
比如:若x1 = +0.1101,x2 = -0.1101,字长为8位,则其原码表示为:[x1]原=0.1101000,[x2]原 =1-(-0.1101)= 1.1101000,其中最高位是符号位。
2)定点整数的原码定义
9.反码
① 对于正数(设字长为8位)
[X]反=[X]原(X≥0)(不变)
设: X=+1101001 (+105),则 [X]反= 0 1101001
↑ 符号位 数值位
② 对于负数
符号位仍为“1”,各数值位“按位取反”。
字长为8位的反码
“0”的两种表示形式:
[+0]反 =0 0000000
[-0]反 = 1 1111111
8位反码表示的数值范围为:+127~-127。
[+127]反 =0 1111111
[-127]反 = 1 0000000
1)定点小数的反码定义:
2)定点证书的反码定义:
10.补码
① 对于正数(字长=8位)
[X]补=[X]原 (即X≥0时)
② 对于负数(字长=8位)
符号位仍为“1”,各数值位“按位取反,末位再加1”,
即: [X]补=[X]反+…1 (即X<0时)
“0”的表示形式: [+0]补=[-0]补= 0 0000000
8位补码,表示范围为:+127~-128
即: [+127]补 =0 1111111;
[-128]补 =1 0000000
【注意】8位补码可以比原码、反码多表示一个负数,即-128
1)定点小数的补码定义:
2)定点整数的补码定义:
11.码制转换
11.定点数的表示
由程序设计者约定,该程序中所有数的小数点固定在同一位置不变。 ① 带符号的定点小数:约定所有数的小数点的位置固定在符号位之后。是纯小数,用原码或者补码表示,
设字长= n+1位
原码表示范围为:-(1-2-n) ~ 1-2-n
补码表示范围为: -1 ~ 1-2-n
分辨率(精度):2-n
② 带符号的定点整数:约定所有数的小数点的位置固定在最低数值位之后。
设字长=n+1位
原码的表示范围为: - (2n -1) ~ 2n -1。
补码的表示范围为: - 2n ~ 2n -1。
分辨率(精度):1
③ 无符号定点整数:约定所有数的小数点的位置固定在最低数值位之后。
12.浮点数表示
浮点表示法中,小数点的位置可按需要浮动。
表示如下:
浮点数真值:N = + M × R^E
R:阶码底,隐含约定,一般为2。
如果以R=2为基底,若浮点数用原码来表示,要求使尾数的绝对值满足:1/2<=|M|<1;尾数最高有效位始终为1.
如果以R=2为基底,若浮点数用补码来表示,要求使尾数的绝对值满足:或者-1<|M|<=-1/2或者1/2<=|M|<1;尾数最高有效位前者为0,后者为1.
E:阶码,为定点整数,补码或移码表示。 其位数决定数值范围。阶符表示数的大小。
M:尾数,为定点小数,原码或补码表示。 其位数决定数的精度;数符表示数的正负。
13.移码
移码(又叫增码或偏置码)通常用于表示浮点数的阶码,其表示形式与补码相似,只是其符号位用“1”表示正数,用“0”表示负数,数值部分与补码相同。
对定点整数x,它的移码是:
[x]移=2n-1+x,其中-2n-1 < x < 2n-1 这里的n为X原位数
上述规则等价于将x正向平移或者增加2n-1 ,因此称之为移码或增码。
移码表示范围与补码一致,0也只有1个移码。 正数:将原码符号位变反,即得到移码。 负数:将原码连同符号位一起变反,末位再加1,即得到移码(与变补等效)。 补码和移码: 符号相反、数值位相同
PS:1.“移码”用来表示浮点型小数的阶码。对于正数,符号位为“1”,其余位不变,如+1110001的阶码为11110001;对于负数,符号位为“0”,其余位取反,最后加“1”,如–1110001的阶码为00001111
2.当阶码为固定值时,数的这种表示法称为定点表示,这样的数称为“定点数”;当阶码为可变时,数的这种表示法称为浮点表示,这样的数称为“浮点数”。
请看书中的书中例2-33
*14.IEEE754格式的浮点数
有32位浮点数(单精度)和64位浮点数(双精度)
注释:
为了确保浮点数表示的唯一性,约定:0≤M<1。
浮点数所表示的范围显然远比定点数大。
注意E为全0/1的三种情况:
(1)E全0,M全0时,F=0;
(2)E全1,M全0时,F为±∞
(3)E全1,M非全0时,F为无效数(NAN);
隐含约定尾数的最高位20 ,即尾数位1.M 所以规格化尾数的真值:
1 ≤M真<2 F真=(-1)^S×1.M×2^(E-127)
[例] 将十进制数20.59375转换成IEEE754的32位标准浮点数的2进制格式,并写出相应的16进制数。
[解]首先分别将整数和小数部分转换成二进制: 20.59375=10100.10011
然后移动小数点,使其在第1、2位之间 10100.10011=1.010010011×2^4
小数点被左移了4位,于是得到:e=4 尾符S=0,为正数,阶码E=4+127=131,131=10000011,尾数M=010010011
最后得到32位浮点数的二进制代码: 0100 0001 1010 0100 1100 0000 0000 0000 =(41A4C000)16
15.字符的表示方法
际上常采用的有ASCII码(美国标准信息交换码),其用7位二进制数表示,可表示96个图形字符以及32个控制字符。
16.补码的加减法
( X + Y )补 = X补 + Y补 (1)
( X - Y )补 = X补 + (-Y)补 (2)
数学依据:
注意:某数的补码表示与某数变补的区别。
17.溢出的判断
溢出:运算结果超出机器数的表示范围
正溢:两正数相加绝对值超出允许的表示范围
负溢:两负数相加绝对值超出允许的表示范围
[假设]补码表示的A、B两数做加减运算
数A有4位尾数,1位符号SA------->补码,符号位参加运算
数B有4位尾数,1位符号SB-------> 补码,符号位参加运算
结果符号Sf 符号位进位Cf 尾数最高位进位C
前面补一个符号位相同的数字生成双符号位保证运算会导致本身只有一位的符号位需要加入运算而改变