知识点
- 数字的存储
- 其他数据的存储(文本,音频,图像,视频)
数据类型
数据在计算机中以不同的形式出现:如数字,文本,音频,视频和图像等。
数据在内部全部都是以位模式进行存储的。
数字存储
- 整数存储(无小数)
- 实数存储(有小数)
整数存储
定点表示法:小数点固定在最右边(小数点不存储) 整数通常使用定点表示法存储在内存中。
- 无符号表示法:只包括零和正数的非负整数,范围 0 到无穷大
- 常用与用不到负整数的场合
- 符号加绝对值表示:无符号整数的范围被对半分,前一半表示正数;后一遍表示负数;存在两个 0:正 0 和负 0
- 最左边用于定义整数的符合。0:正整数;1:负整数
- 二进制补码表示法:最左边决定符号。0:正整数,1:负整数。
- 运算方式一:从右边复制位,直到有 1 被复制;接着反转其余的位
- 运算方式二:反码的基础上+1
二进制补码存储整数
- 将整数变成 n 位二进制数。
- 正数或 0 原样存储;负数,取其补码存储。
二进制补码还原整数
- 如果最左位是 1,取其补码。如果最左位是 0,不进行操作。
- 计算机将整数转换为十进制。
带有很大的整数部分或很小的小数部分的实数不应该用定点表示法存储。
实数
整数部分+小数部分的数字。
浮点表示法:用于维持正确精度。
- 由:符号、位移量和定点数组成
- 符号:一个数的符号可以用一个二进制来存储(0 或 1)
- 指数:小数点移动的位数
- 尾数:小数点右边的二进制数
尾数是带符号的小数部分,像以符号加绝对值表示法存储的整数那样对待。
IEEE 标准
- 单精度:32 位存储一个浮点表示法的实数(余 127 码)
- 双精度:64 位存储(余 1023 码)
文本的存储
文本的存储关键在于字符的存储,也就是怎么建立字符和数字的映射关系。简单的讲就是给字符编码。
常见的编码方式有 ASCII 和 Unicode。现在比较常用的是 UTF-8 变长编码。
音频的存储
音频的本质是波形,也可以看作是 x 轴为时间,y 轴为赫兹的一个函数。
但是计算机并不能存储连续的数据,只能将其转化为离散的数据存储下来。
采样
将连续函数转化为离散函数的通用方法就是采样。
在这里便是对波形进行采样,也就是取出许多个时间点的对应的赫兹存下来。例如说 1 秒 10 个采样的话那就是存下第 0,0.1,0.2,0.3,0.4,。。。秒时的对应赫兹(也就是 y 值)。
量化
对于每一个采样的数据而言,其大概率会是一个小数点后有很多位的实数。这个时候为了存储方便往往会将其转化为一个无符号整数,这就是量化。
编码
根据存储格式的不同,其编码的标准也会不同。抛开其数据组织和压缩方式,其区别主要在于每样本位和位率:
每样本位:每一个采样出来的数占多少位。 位率:可以简单理解为每秒播放多少数据。假设每秒 40000 个采样,每样本 16 位的情况下,位率就是 40000*16=640000b/s=640KB/s
图像的存储
图像的存储分位图和矢量图两种。
位图的存储方式就是将其看作 a*b 个像素点堆成的栅格图。其中每个像素点有两种表示颜色的方法:
- 真彩色:也就是 RGB 值,用 24 位来表示一个颜色,每种颜色占 8 位。
- 索引色:相当于将常用颜色拿出来单独编号,并映射到真彩色。这么做是为了减少存储量。
- 而矢量图更像是定义一些函数来表示这个图的图案。矢量图的一个好处就是不像位图一样存在放大后失真的问题。但麻烦的地方在于数据组织方式比较麻烦,而且矢量图不适合用于存储细节较多的图片(举个例子,现实中的一张照片天知道要用多少个函数才能画出来)。
视频的存储
视频的存储分为图像的存储和音频的存储。