3.2.2 存储实数
1. 浮点表示法
该表示法允许小数点浮动,用于维持正确度或精度。
在此表示法中,无论十进制还是二进制,一个数字都由3部分组成:
- 符号
- 位移量: 显示小数点应该左右移动构成实际数字的位移量。
- 定点数:小数点位置固定的定点表示法
例子 3.18 - 3.19 展示了如何使用科学技术法,比如 + 7425000000000000000000.00可表示为 +7.425 * 1021 或者是+7.425E21
例子 3.20 用浮点格式表示数字(101001000000000000000000000000000.00)2
可用科学技术法表示为: 1.01001 * 232
2. 规范化
十进制: +- d.xxxxxxxxxxx 其中,d是1到9, 每个x是0到9
二进制: +- 1.yyyyyyyyyyy 其中,每个y是0或1
3. 符号、指数和尾数
一个二进制数规范化之后,只存储该数的3部分信息:
- 符号:可以用一个二进制位来存储(0或1)
- 指数(2的幂):定义为小数点移动的位数。可正可负
- 尾数:指小数点右边的二进制数
例如: + 100111.0101 可表示为 +1.0001110101 * 26
此数符号为+、指数为6、尾数为0001110101
4. 余码系统
尾数可作为无符号数存储。指数是有符号的数,可用余码系统来存储。
余码系统:正负整数都可作为无符号数存储。为了表示正/负整数,将正整数(称为一个偏移量)添加到每个数字中,将它们统一移到非负的一边。这个偏移量的值是2m-1 – 1, m是内存单元存储指数的大小。
例 3.22 4位存储单元在数字系统中表示16个整数。
- 使用一个单元作为0,分开其他15个,在-7到8的范围中表示整数。注意,他们并不一定是对称的。
- 在该范围中增加7个单位到每隔整数中,可以统一把所有整数向右移,使其均为整数而无需改变这些整数的相对位置,避免互相调整。
原系统 -7 –6 – 5 –4 –3 –2 –1 0 1 2 3 4 5 6 7 8 偏移后 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 偏移后的系统称为余7码 位移后与位移前,优点在于余码系统中的所有整数都是正数。对于以上的4位存储单元,偏移量为24-1 – 1 = 7
5. IEEE标准
单精度 余127码 符号 指数 尾数 32位 1 8 23 双精度 余1023码 符号 指数 尾数 64位 1 11 52 6. IEEE标准浮点数的存储
1)在S中存储符号(0或1)
2)将数字转换为二进制
3)规范化
4)找到E和M的值
5)连接S,E和M
例 3.23 写出十进制数5.75的余127码(单精度)表示法
解: 1)符号为正,所以S = 0
2)十进制转换为二进制:5.75 = (101.11)2
3)规范化:(101.11)2 = (1.1011)2 * 22 。
4)E = 2 + 127 = 129 = (10000001)2 , M = 1011。需要在M的右边增加19个0使之称为23位。
5)最终S = 0, E = 10000001, M = 1011000000000000000000
存储在计算机中的数字是0 1000001 10110000000000000000000
例 3.24 写出十进制数-161.875的余127码(单精度)表示法
解: 1)符号为负,所以S = 1
2)十进制转换为二进制:-161.875 = (10100001.111)2
3)规范化:(10100001.111)2 = (1.10100001111)2 * 27 。
4)E = 7 + 127 = 134 = (10000110)2 , M = 0100001111。需要在M的右边增加19个0使之称为23位。
5)最终S = 1, E = 10000110, M = 01000011110000000000000
存储在计算机中的数字是1 10000110 01000011110000000000000
7. 将存储为IEEE标准浮点格式的数字还原
1)找到S、E和M的值
2)如果S = 0, 将符号设为证号,否则设为负号
3)找到位移量(E - 127)
4)对尾数规范化
5)将规范化的数字变为十进制以求出绝对值
6)加上符号
例3.26 位模式(11001010000000000111000100001111)2 以余127码格式存储于内存中,求该数字十进制计数法的值。
解:1)首位表示S,后8位是E,剩下23位是M
S = 1, E = 10010100, M = 00000000111000100001111
2)符号为负号
3)位移量 = E –127 = 148 – 127 = 21
4)将(1.00000000111000100001111)2 * 221 规范化
5)二进制数为1000000001110001000011.11
6)绝对值是2104378.75
7)该数字是-2104378.75
8.上溢和下溢
该表示法不能存储很小或很大的绝对值。
试图存储绝对值很小的数导致下移,存储绝对值很大的数导致上溢情况。
9. 存储0
这种情况下符号 、指数和尾数都设为0
3.3 存储文本
可以使用位模式表示任何一个符号。需要多少位来表示一个符号,取决于该语言集中到底有多少不同的符号。
位模式的长度,与符号的数量,它们之间的是对数的关系。如果需要2个符号,位模式长度是1位(log2 2 = 1).
代码
1)ASCII
该代码使用7位表示每个符号,总共可定义27 = 128种不同的符号。
2)Unicode
该代码可表示最大232 = 4294967296个符号。
3.4 存储音频(跳过)
3.5 存储图像
- 光栅图
- 矢量图
3.5.1 光栅图
存储模拟图像(如照片)时,就用到了光栅图(或位图)。
1)解析度
图像处理中的扫描率称为解析度
2)色彩深度
- 真彩色
使用24位来编码一个像素。每个三原色(RGB)都表示为8位,8位模式可以表示0-256之间的一个数字,所以每种颜色都由0到255之间的三维数字表示。- 索引色
索引色仅使用真彩色中的一部分。
3)图像编码标准
JPEG使用真彩色模式,但压缩图像来减少位的数量。GIF使用索引色模式。
光栅图的两个缺点:
- 文件尺寸太大
- 重新调整图像大小有麻烦
放大光栅图像就意味着扩大像素,所以扩大后的图像看上去很粗糙。
3.5.2 矢量图
矢量图图像编码方法不存储每个像素的位模式。一个图像被分解成几何图形的组合。
矢量图适合应用程序采用主要的几何元素来创建图像。例如,flash这样的程序。
3.6 存储视频(跳过)