第三章 数据存储
引言
本章我们讨论不同的数据类型以及他们是如何存储在计算机当中
3.1 数据类型
数据={数字,文本,音频,图像,视频}
计算机内部数据
所有计算机外部的数据类型都采用统一的数据表示法转换后存入计算机中,在数据输出时再还原回来。
这种格式叫做位模式。
1.位
位(bit)是计算机中的最小单位,它是0或1。位代表设备中的某一状态,这些设备只能处于0,1两种状态之一。
2.位模式
位模式是一个序列,有时也称位流。
通常长度为8的位模式称为一个字节(byte)。
3.数据压缩
3.2 存储数字
解决存储数字的符号和小数点的问题
3.2.1 存储整数
整数可以被当成小数点固定的数字——小数点固定在最右边,因此可以采用定点表示法来存储整数。为了更好的利用计算机没存,有符号和无符号的整数的存储方法是不同的。
1.无符号整数
无符号整数即没有符号的整数,它的范围介于0到最大值之间。计算机一般都定义了一个最大无符号整数的常量,成为最大无符号整数,它的值是(2^n-1)。n是计算机中分配用于表示无符号整数的位数。
(1)存储无符号整数
使用以下步骤输入设备存储无符号整数:
·首先将整数变为二进制数
·如果二进制数的个数不足n,则在其左边补0,直至个数为n
·如果二进制数个数超过n,则产生溢出,无法存储
(2)译解无符号整数
输出设备译解内存中位模式的位串并转换为一个十进制的无符号整数。
(3)溢出
因为存储单元位的数量的限制,可以表达的数是有限的。当存储的整数大于最大位数时,只会保存最大位数之后的数字,丢掉炒出的位数。
(4)无符号整数的应用
只要不用到负整数,都可以用无符号整数来表示。
·计数
·寻址
·为其他数据类型排序
2.符号加绝对值表示法
尽管符号加绝对值表示格式在存储整数中并不常用,但该格式应用于计算机中存储部分实数。
在这种方法中,用于无符号存储的范围(0~2^n-1)被分成了相等的两个子范围,分别表示正负两部分。注意,负数出现在正数的右边,且该系统中有两个0:正0和负0。
用这种方法时需要用一个位来表示符号(0表示正,1表示负),因此最大的正数仅为无符号最大数的一半。
(1)符号加绝对值表示法的溢出
同无符号整数一样,符号加绝对值表示法也有溢出,但是,这时有正负两种溢出。
(2)符号加绝对值表示法的应用
符号加绝对值表示法不用于存储整数,而用于存储部分实数。此外,符号加绝对值表示法通常用于采样模拟信号,例如:音频。
3.二进制补码表示法
几乎所有计算机都用二进制补码表示法来存储位于n位存储单元中的有符号整数。
在这一方法中,无符号整数的有效范围(0~2^n-1)被分为两个相等的子范围。第一个用来表示非负整数,第二个表示负整数。负数在正数右边。首位觉得符号,0为非负数,1为负数。二进制补码表示法只有一个0。
(1)两种运算
·反码——简单反转各位,0<->1
进行两次反码运算可以得到原先的整数
例:100110<——>011001
·补码
首先从右边复制位,知道有1被复制;接着反转其余的位。
另一种运算方法是对它进行一次反码运算后加1
进行两次补码运算就能得到原先的整数
(2)以二进制补码格式存储整数
步骤如下:
·首先将整数转换为二进制格式
·若原整数为正,则以原样存储;若原整数为负,则取其补码存储。
(3)二进制补码格式还原整数
·若最左位是1,则取其补码;若最左位是0,则不进行操作
·计算机将其转换为十进制
(4)二进制补码表示法的溢出
正负两种溢出
(5)二进制补码表示法的应用
计算机中用于存储有符号整数的标准表示法
3.2.2 存储实数
1.浮点表示法
也个数字的浮点表示法由三部分组成:符号、位移量、定点数。
科学记数法:52460=5.246*10^4
浮点表示法:10011=1.0011*2^4
2.规范化
科学记数法和浮点表示法都在小数点左边使用了唯一的非零数码,成为规范化。
十进制: ± d.xxxxxxxx d={1,2,3,4,5,6,7,8,9} x={0,1,2,3,4,5,6,7,8,9}
二进制: ±1.yyyyyyyyy y={0,1}
3.符号、指数和尾数
在一个二进制数规范化之后,只需存储该数字的三部分信息:符号、指数和尾数(小数点右边的位)。
(1)符号(S):一个二进制位来表示(0或1)
(2)指数(E):指数(2的幂)定义为小数点移动的位数,可正可负。余码表示法是用来存储指数位的方法。
(3)尾数(M):尾数是指小数点右边的二进制数,它定义了该数的精度,作为无符号整数进行存储。
4.余数系统
指数是有符号的数,在余码系统中,正的和负的整数都可以作为无符号整数存储。为了表示正的或负的整数,将一个偏移量(正整数)添加到每个数字中,将它们统一移到正的一方。这个偏移量的值为2^m-1,m为内存单元存储指数的大小。
5.IEEE标准
IEEE已定义了几种存储浮点数的标准。这里我们讨论其中两种最常用的——单精度和双精度。
余127码: S(1) 指数(8) 尾数(23)
余1023码: S(1) 指数(11) 尾数(52)
单精度格式采用总共32位来存储一个浮点数。符号占1位(0或1),指数占8位(使用偏移量127),尾数占23位(无符号数)。该标准有时称为余127码,因为偏移量是127.
双精度格式采用总共64位来存储一个浮点数。符号占1位(0或1),指数占11位(使用偏移量1023),尾数占52位(无符号数)。该标准有时称为余1023码,因为偏移量是1023.
6.IEEE标准浮点数的存储
1)在S中存储符号
2)将数字转换为二进制
3)规范化
4)找到E和M的值
5)连接S,E,M
7.IEEE标准浮点数的还原
1)找到S,E,M的值
2)如果S=0,则为正;否则为负
3)找到位移量(E-127/1023)
4)对尾数进行去规范化
5)将去规范化之后的数字变为十进制以求出绝对值
6)加上符号
8.上溢和下溢
浮点表示法不能存储绝对值过大或过小的数字。
9.存储零
带有整数部分和小数部分的实数为零是表示为0.0,无法用上述步骤存储。因此约定在这种情况下,符号、指数、尾数都设为0。
10.截断误差
存储数字时只会保留规定的位数,额外的位数会被阶段舍弃。
3.3 存储文本
文本的片段是用来表示该语言中某个意思的一系列的符号。我们可以用位模式来表示任何一个符号,只要解决需要多少位来表示的问题——而这取决于要表示的语言集由多少个符号。例如英语仅有26个字母,汉字则更多。更多的符号意味着更长的位模式。
位模式的长度与符号的数量并不是线性的,而是对数关系。即2^k=N——>k=log2N
代码:不同的用于表示文本符号的集合。
(1)ASCII
(2)Unicode
3.4 存储音频
音频是随时间变化的实体,是不可数的。我们只能在每一时刻度量声音的密度,存储进计算机。
3.4.1采样
我们不能记录一段时间内音频信号的所有值,但是可以选择数量有限的点来度量它们的值并记录下来。
采样率:每秒多少个样本值
3.4.2 量化
采样得到的是真实的数字,但是如果使用无符号的数会更简便。量化是指将样本值截断取为最接近的整数值的一个过程。
3.4.3编码
量化的样本值需要编码成位模式。一些系统使用无符号整数,一些系统使用符号加绝对值。
1.每样本位:每个样本系统决定分配多少位。
2.位率:每样本位的数量为B,每秒样本数为S,则需要每秒音频存储S*B位。该乘积称为位率R。
3.4.4 声音编码标准
例:MP3(MPEG Layer 3) :有损压缩法
3.5 存储图像
3.5.1 光栅图
当我们存储模拟图像时,采用光栅图(或位图)。一张照片由模拟数据组成,不同于音频信号,图像的数据密度随空间变化。数据的采样称作扫描,样本称为像素。
1.解析度
我们要决定没英寸的方块或线条需要记录多少像素。在图像处理中的扫描率称为解析度。
2.色彩深度
用于表现像素的位的数量,称为色彩深度。
(1)真彩色(用于像素编码的技术之一)
用24位来编码一个像素,每个三原色(RGB)都表示为8位,可以表示0~256之间的一个数。
真彩色模式可以编码2^24种颜色。
(2)索引色
许多应用程序用不到真彩色那么大的颜色范围,索引色模式仅使用一部分,并对其建立索引。
(3)图像编码标准
例:JPEG,GIF等
3.5.2 矢量图
光栅图有两个缺点,即文件尺寸太大和重新调整大小有麻烦。放大光栅图意味着扩大像素,所以放大后光栅图看起来很粗糙。
矢量图的编码方法并不存储每个像素的位模式,而是将像素分解成几个几何图形的组合。例如:线段、矩形或圆形。每个几何形状由数学公式表达。矢量图是由定义如何绘制这些形状的一系列命令构成的。
当要显示或打印图像时,将图像的尺寸输入传给系统,系统重新设计图像的大小并用相同的公式画出图像。因此矢量图也称为几何模型或面向对象图形。
矢量图不适合存储图像的细微精妙,而适合应用程序采用主要的几何元素来创建图像。
3.6 存储视频
视频时图像在时间上的表示(称为帧)。所以,如果知道如何将一副图片存储在计算机中,我们也就知道如何存储视频;每一帧转化为一系列位模式并存储,这些图像组合起来表示成视频。视频通常时压缩存储的。