第三章 数据存储
引言
本章咱们讨论不一样的数据类型以及他们是如何存储在计算机当中编码
3.1 数据类型
数据={数字,文本,音频,图像,视频}设计
计算机内部数据
全部计算机外部的数据类型都采用统一的数据表示法转换后存入计算机中,在数据输出时再还原回来。code
这种格式叫作位模式。视频
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)两种运算
·反码——简单反转各位,01
进行两次反码运算能够获得原先的整数
例:100110011001
·补码
首先从右边复制位,知道有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 存储视频
视频时图像在时间上的表示(称为帧)。因此,若是知道如何将一副图片存储在计算机中,咱们也就知道如何存储视频;每一帧转化为一系列位模式并存储,这些图像组合起来表示成视频。视频一般时压缩存储的。