2.2 数据的表示和存储(二)

2.4 浮点数的编码表示

1. 浮点数类型

C语言声明操作数类型存储长度(位)
float单精度浮点数32
double双精度浮点数64
long double扩展精度浮点数80 / 96

2. 浮点数的表示

(1)浮点数(Floating Point)的表示范围
  • 以下面的32位浮点数格式的规格化数为例,计算表示范围
    在这里插入图片描述
    ①第0位数符S;
    ②第1~8位为8位移码表示阶码E(偏置常数为128);
    ③第9 ~31位为24位二进制原码小数表示的尾数M;
    规格化尾数的小数点后第一位总是1,故规定第一位默认的“1”不明显表示出来。这样可用23个 数位表示24位尾数。
    在这里插入图片描述
  • 因为原码对称,故其表示范围关于原点对称。可表示的范围包括图中阴影部分
    在这里插入图片描述
  • 机器0:即尾数为0 或落在下溢区中的数
  • 浮点数范围比定点数大,但数的个数没变多,故数之间更稀疏,且不均匀
(2)规格化数形式(Normal format)

为了能表示更多有效数字,通常规定规格化数的小数点前为1

在这里插入图片描述

  • 32-bit 规格化数
    在这里插入图片描述
    其中:
     ①S是符号位(Sign)
     ②Exponent用移码(增码)来表示
     ③Significand 表示xxxxxxxxxxxxx(部分尾数) (基可以是2/ 4 / 8 / 16,约定信息,无需显式表示)
(3) IEEE 754 标准

在这里插入图片描述

  • 单精度浮点数表示:
    在这里插入图片描述
    其中:
     ①Sign bit: 1 表示negative ; 0表示positive
     ②Exponent(阶码): 全0或全1用来表示特殊值
       SP规格化阶码范围为0000 0001 (-126) ~ 1111 1110 (127)
       偏置常数(bias)为127 (single), 1023 (double)
     ③Significand(部分尾数):
       规格化尾数最高位总是1,所以隐含表示,省1位
       1 + 23 bits (single),1 + 52 bits (double)
    ==》单精度浮点(SP): (-1)Sx (1 + Significand) x 2(Exponent-127)
       双精度浮点(DP): (-1)Sx (1 + Significand) x 2(Exponent-1023)

Q:为什么偏置常数要取127而不是128?

A: IEEE 754标准中,单精度浮点数可表示的范围是0000 0001 (-126) ~ 1111 1110 (127);若偏置常数使用128,则32位浮点数可表示的范围0000 0001 (-127) ~ 1111 1110 (126),[128-127=1,128+126=2^7 -1] , 而 2^126 ~2^127可表示的范围比 2^-127 ~ 2^-127 大。

Q: 已知float型变量x的机器数为BEE00000H,求x的值是多少?

A: 转化为二进制 :1 ,011 11101,110 0000 0000 0000 0000 0000

  • 数符: 1 (负数)
  • 阶(指数): 为避免混淆,用"阶码"表示阶的编码,用"阶"或"指数"表示阶码的值
     阶码: 0111 1101B = 125
     阶码的值: 125 -127 = -2
  • 尾数数值部分: 1 +1x2-1+ 1x2-2+ 0x2-3+ 0x2-4+ 0x2-5+… =1+2-1+2-2= 1+0.5 +0.25 = 1.75

    所以,真值: -1.75x2-2= -0.4375


Q: 已知float型变量x的值为-12.75,求x的机器数是多少?
A: -12.75=-1100.11B =-1.10011B x 23

  • 符号S=1
  • 阶码E=127+3=128+2=1000 0010
  • 显式表示的部分尾数Significant = 100 1100 0000 0000 0000 0000

    所以: x 的机器数表示为: 1 ,1000 0010, 100 1100 0000 0000 0000 0000
    转换为十六进制表示为:C14C0000H

3. 其他形式的机器数表示

前面的定义是针对规格化形式(normalized form)的数 那么,其他形式的机器数表示什么样的信息呢?

(1)0的机器数表示
  • How to represent 0?
    • exponent: all zeros
    • significand: all zeros
    • What about sign?Both cases valid.

+0: 0 00000000 00000000000000000000000
-0: 1 00000000 00000000000000000000000

(2)+∞/-∞的机器数表示
  • 浮点数除0的结果是+/-∞, 而不是溢出异常.(整数除0为异常)
  • 为什么要这样处理? 可以利用+∞/-∞作比较。例如:X/0>Y可作为有效比较
  • How to represent +∞/-∞?
    • Exponent: all ones (11111111B = 255)
    • Significand: all zeros

+∞: 0 11111111 00000000000000000000000
-∞: 1 11111111 00000000000000000000000

(3)“非数”的表示(NaN)
  • 例如“Sqrt (-4.0) ”,“0/0”等的结果称为Not a Number (NaN) ,即“非数”
  • NaNs 可以帮助调试程序
  • How to represent NaN ?
    • Exponent: 255
    • Significand: nonzero

4. 非规格化数(Denorms)的表示

  • How to represent Denorms?
    • Exponent: 0
    • Significand: nonzero
      在这里插入图片描述

关于浮点数精度的一个例子
在这里插入图片描述
61.41999861.420002是两个可表示数,两者之间相差 0.000004。当输入数据是一 个不可表示数时,机器将其转换为最邻近的可表示数。

5. 总结

ExponentSignificand表示类型
00+/-0
0nonzeroDenorms
1-254任意,小数点前隐含1Norms
2550+/-infinity
255nonzeroNaN

2.5 非数值数据的编码表示

1. 逻辑数据的编码表示

  • 何时会用到逻辑数据:表示逻辑(关系)表达式中的逻辑值(真/假 )
  • 表示: 用一位表示。N位二进制数(位串)可表示N个逻辑数据
  • 运算: 按位进行。如,按位与/ 按位或/ 逻辑左移/ 逻辑右移等
  • 识别: 逻辑数据和数值数据在形式上并无差别,也是一串0/1序列, 计算机靠指令来识别。

2. 西文字符的编码表示

  • 特点
     是一种拼音文字,用有限几个字母可拼写出所有单词
     只需对有限个字母和数学符号、标点符号等辅助字符编码
     所有字符总数不超过256个,使用7或8个二进位可表示
  • 表示(常用编码为7位ASCII码)
     十进制数字:0/1/2…/9
     英文字母:A/B/…/Z/a/b/…/z –专用符号:+/-/%/*/&/……
     控制字符(不可打印或显示)
  • 操作
      字符串操作,如:传送/比较 等
  • ASCII码表:0 -- 30H, A -- 41H , a -- 61H
    在这里插入图片描述

3. 汉字及国际字符的编码表示

(1)汉字的编码形式
  • 输入码: 对汉字用相应按键进行编码表示,用于输入
  • 内码: 用于在系统中进行存储、查找、传送等处理
  • 字模点阵或轮廓描述: 描述汉字字模点阵或轮廓,用于显示/打印

Q: 西文字符有没有输入码?有没有内码? 有没有字模点阵或轮廓描述?
A: 西文可由键盘直接输入,不用输入码;但也有内码和字模点阵。

(2)GB2312-80字符集
  • 由三部分组成
     ①字母、数字和各种符号,包括英文、俄文、日文平假名与片假名、罗马字母、汉语拼音等共687个
     ②一级常用汉字,共3755个,按汉语拼音排列
     ③二级常用汉字,共3008个,不太常用,按偏旁部首排列
  • 汉字的区位码
     ①码表由94行、94列组成,行号为区号,列号为位号,各占7位
     ②指出汉字在码表中的位置,共14位,区号在左、位号在右
  • 汉字的国标码
     ①每个汉字的区号和位号各自加上32(20H),得到其“国标码”
     ②国标码中区号和位号各占7位。在计算机内部,为方便处理与存 储,前面添一个0,构成一个字节。
(3)汉字内码
  • 至少需2个字节才能表示一个汉字内码。为什么?
     由汉字的总数(超过6万字)决定! 2^16=65536
  • 可在GB2312国标码的基础上产生汉字内码
     为与ASCII码区别,将国标码的两个字节的第一位 置“1”后得到一种汉字内码(可以有不同的编码方案)
    在这里插入图片描述

4. 多媒体信息的表示

  • 图形、图像、音频、视频等信息在机器内部也用0和1表示
     – 图形用构建图形的直线或曲线的坐标点及控制点来描述,而这些 坐标点或控制点则用数值数据描述
     – 图像用构成图像的点(像素)的亮度、颜色或灰度等信息来描述 ,这些亮度或颜色等值则用数值数据描述
     – 音频信息通过对模拟声音进行采样、量化(用二进制编码)来获 得,因此量化后得到的是一个数值数据序列(随时间变化)
     – 视频信息描述的是随时间变化的图像(每一幅图像称为一帧)
     – 音乐信息(MIDI)通过对演奏的乐器、乐谱等相关的各类信息用 0和1进行编码来描述
     – …….
  • 多媒体信息用一个复杂的数据结构来描述,其中的基本数据或者 是数值数据,或者是用0/1编码的非数值数据

2.6 数据宽度和存储容量的单位

1. 数据的基本宽度

  • 比特(bit,位)是计算机中处理、存储、传输信息的最小单位
  • 二进制信息最基本的计量单位是“字节”(Byte) –现代计算机中,存储器按字节编址
      – 字节是最小可寻址单位 (addressable unit )
      – 如果以字节为一个排列单位,则LSB表示最低有效字节,MSB 表示最高有效字节
  • 除比特(位)和字节外,还经常使用“”(word) 作为单位 。

“字”和“字长”的概念不同

  • “字长”指数据通路的宽度。 ”字长”等于CPU内部总线的宽度、运算器的位数、通用 寄存器的宽度(这些部件的宽度都是一样的)
  • “字”表示被处理信息的单位,用来度量数据类型的宽度
  • 字和字长的宽度可以一样,也可不同
    例1:对于x86体系结构,不管字长多少,定义“字”的宽 度都为16位,而从386开始字长就是32位了。
    例2:对于MIPS 32体系结构,其字和字长都是32位。

    数据通路指CPU内部数据流经的路径以及路径上的部件,主要是 CPU内部进行数据运算、存储和传送的部件,这些部件的宽度基 本上要一致,才能相互匹配。
2.数据量的度量单位
  • 存储二进制信息时的度量单位要比字节或字大得多
  • 容量经常使用的单位有:
     – “千字节”(KB),1KB=210字节=1024B
     – “兆字节”(MB),1MB=220字节=1024KB
     – “千兆字节”(GB),1GB=230字节=1024MB
     – “兆兆字节”(TB),1TB=240字节=1024GB
  • 通信中的带宽使用的单位有:
      – “千比特/秒”(kb/s),1kbps=103 b/s=1000 bps
      – “兆比特/秒”(Mb/s),1Mbps=106 b/s=1000 kbps
      – “千兆比特/秒”(Gb/s),1Gbps=109 b/s=1000 Mbps
      – “兆兆比特/秒”(Tb/s),1Tbps=1012 b/s=1000 Gbps
    如果把b换成B,则表示字节而不是比特(位) 例如,10MBps表示10兆字节/秒
3. 程序中数据类型的宽度
  • 高级语言支持多种不同类型和 不同长度的数据
     –例如,C语言中char类型的宽 度为1个字节,可表示一个字 符(非数值数据),也可表示 一个8位的整数(数值数据)
     –不同机器上表示的同一种类型 的数据可能宽度不同
  • 必须确定相应的机器级数据表示方式和相应的处理指令
  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值