第2章
二进制与记数系统
2.1 数字与计算
- 数字:抽象数字系统的一个单位,服从算术法则
- 自然数:0或通过在0上重复加1得到的任何数
- 负数:小于0的数,是在相应的正数前加上负号得到的数
- 整数:自然数、自然数的负数或0
- 有理数:整数或两个整数的商(不包括被0除的情况)
2.2 位置记数法
- 基数:记数系统的基本数值,规定了这个系统中使用的数字量和数位位置的值。
- 位置记数法:一种表达数字的系统,数位按顺序排列,每个数位有一个位值,数字的值是每个数位和位值的乘积之和。
2.2.1 二进制、八进制和十六进制
以2为基数的记数系统在计算中尤其重要,了解以2的幂为基数的记数系统也很有用。
基数规定了记数系统中数字的个数
2.2.2 其他记数系统中运算
其他进制运算的规则与十进制运算的类似,进位和借位的原理相同。
例如:进行减法法则时,必须从减数数字中的下一个左边数位上“借1”。更确切地说,借的是基数的一次幂。因此,在十进制中,借位时借到的是10,同样的逻辑适用于二进制(以及其他进制)减法。在二进制减法中,每次借位借到的是2。
2.2.3 以2的幂为基数的记数系统
二进制数转换到八、十六进制数的方法:
- 把二进制数转换成八进制数,要从最右边的二进制数位开始,每三个数位一组,把每组数字转换成相应的八进制数
- 把二进制数转换成十六进制数,要从最右边的二进制数位开始,每四个数位一组,把每组数字转换成相应的十六进制数
2.2.4 把十进制数转换成其他进制的数
算法:
While(商不是0)
用新基数除这个十进制数
把余数作为答案左边的下一个数字
用商代替这个十进制数
2.2.5 二进制数值与计算机
计算机中的数字都是用二进制形式表示的,所有信息都是二进制数值表示的。计算机每个储存位放的值是0或1,且储存位不能是空的,必须存放0或1。
- 二进制数字:二进制记数系统中的一位数字,可以是0或1。
- 位:二进制数字的简称。
- 字节:8个二进制位
- 字:一个或多个字节,字中的位数称为计算机的字长。
第3章
数据表示法
3.1 数据与计算机
- 数据:基本值或事实。
- 信息:用有效的方式组织或处理过的数据。
计算机可以储存、表示和帮助我们修改各种类型的数据,包括:
- 数字
- 文本
- 音频
- 图像与图形
- 视频
这些数据最终都被存储为二进制数字。每个文档、图像和音频都将被表示为由0和1组成的字符串。
- 多媒体:几种不同的媒体形式。
- 数据压缩:减少存储一段数据所需的空间。
- 带宽:在固定时间内从一个地点传输到另一个地点的最大位数或字节数。
- 压缩率:压缩后的数据大小除以原始数据大小的值。
- 无损压缩:不会丢失信息的数据压缩技术。
- 有损压缩:会丢失信息的数据压缩技术。
3.1.1 模拟数据与数字数据
表示数据的方法有两种:
- 模拟法
- 数字法
- 模拟数据是一种连续表示法,模拟它表示的真实数据。(用连续形式表示的信息)
- 数字数据是一种离散表示法,把信息分割成了独立的元素。(用离散形式表示的信息)
- 数字化:把信息分割成离散的片段。
- 脉冲编码调制(PCM):电信号在两个极端之间跳跃的变化。
- 重新计时:在信号降级太多之前将它重置为原始状态的行为。
3.1.2 二进制表示法
一般来说,n位二进制数字能表示2n种状态,因为n位数字可以构成2n种0和1的组合。
即使技术上只需要最少的位数来表示一组状态,而我们也可能会多分配一些位数。
计算机体系结构一次能够寻址和移动的位数有一个最小值,通常是2的幂,如8、16或32位。
因此,分配给任何类型的数据的最小存储量通常是2的幂的倍数。
3.2 数字数据表示法
3.2.1 负数表示法
- 符号数值表示法:符号表示数所属的分类(正数或负数)、值表示数的量值的数字表示法。
十进制补码
- 定义:一种负数表示法,负数I用10的k次幂减I表示。
- 公式:Negative(I)=10k-1,其中k是数字个数
二进制补码
- 公式同十进制补码相同
假定数字只能用八位表示,七位表示数值,一位表示符号。
如果最左边一位是“0”,那么就说明这个数字是正数;如果最左边一位是“1”,那么说明这个数字是负数。
有个更简单的方法来计算二进制补码:将每一位取反再加一。也就是,取数字的正值,将所有“1”变成“0”,将所有“0”变成“1”,再加1。
- 数字溢出:给结果预留的位数存不下计算出的值的状况。
3.2.2 实数表示法
- 小数点(raadix point):在记数系统中,把一个实数分割成整数部分和小数部分的点。
- 浮点表示法:标明了符号、尾数和指数的实数表示法。
在计算机中,我们把实数存储位一个整数加指示小数点位置的信息。即,任何实值都可以由三个属性描述,即符号(正号或负号)、尾数和指数,尾数由该数值中的数字构成,假定小数点在其右边,而指数确定了小数点相对于尾数的位移。十进制的实值可以用下列公式定义:
符号 X 尾数 X 10exp
这种表示法称为浮点表示法,因为数字的个数是固定的,但是小数点却是浮动的。在用浮点形式表示的数值中,正指数将把小数点向右移,负指数将把小数点向左移。
下面的公式定义了一个二进制浮点值: 符号 X 尾数 X 2exp
把小数部分从十进制转换成其他进制
操作:用新基数(小数)乘这个数(进制数),乘法的进位将成为答案右边的下一位数字,乘法结果中的小数部分将成为新的被乘数,整个过程直到乘法结果中的小数部分为0截止。
- 科学计数法:另一种浮点表示法。
例如:早期科学计数法中,12001.32708将被写为1.200322708E+4
现在:1.200322708*104
3.3 文本表示法
- 字符集:字符和表示它们的代码的清单。
3.3.1 ASCII字符集
最初,ASCII字符集用7位表示每个字符,可以表示128个不同的字符。每个字节中的第八位最初被用作校检位,协助确保数据传输正确。之后,进化为用8位表示每个字符,以表示256个字符,即Latin-1扩展ASCII字符集。
注意:每个ASCII字符都有自己的顺序,这是由存储它们所用的代码决定的。每个字符都有一个相对于其他字符的位置(在其他字符之前或之后)。
3.3.2 Unicode字符集
Unicode字符集被许多程序设计语言和计算机系统采用。
一般情况下,每个字符的编码都为16位,但也是十分灵活的,如果需要的话每个字符可以使用更多空间,以便表示额外的字符。
为了保持一致,Unicode字符集被设计为ASCII字符集的超集。即,Unicode字符集中的前256个字符与扩展ASCII字符集中的完全相同。因此,即使底层系统采用的是Unicode字符集,采用ASCII值的程序与不会受到影响。
3.3.3 文本压缩
- 关键字编码
定义:用单个字符代替常用的单词。(相当直接的压缩方法)
局限性:
- 用来对关键词编码的字符不能出现在原始文本中,防止歧义。
- 在计算机上字母的大写和小写是不同的字符,要用不同的符号编码。
- 不要做用一个字符换一个字母的压缩
- 被编码的通常都是较短的单词或模式,替换之后节省的空间比较少。
- (即压缩率低)
- 行程长度编码(迭代编码)
定义:把一系列重复字符替换为他们重复出现的次数。
操作:在行程长度编码中,重复字符的序列将被替换为标志字符,后面加重复字符和说明字符重复次数的数字。
局限性:对长度为2或3的字符串进行编码是不值得的,因为我们用一个字符记录重复的次数,所以看来不能对重复次数大于9的序列编码。不适合用于编码二进制字符串。
(即压缩率中等) - 赫夫曼编码
定义:用变长的二进制串表示字符,使常用的字符具有较短的编码。
内容:赫夫曼编码使用不同长度的位串表示每个字符。用较少的位表示经常出现的字符,而将较长的位串留给不经常出现的字符。
重要特征:用于表示一个字符的位串不会是表示另一个字符位串的前缀。
3.4 音频数据表示法
要在计算机上表示音频数据,必须数字化声波,把它分割成离散的、便于管理的片段。方法之一是真正数字化声音的模拟表示法。即,采集表示声波的电信号,并用一系列离散的数值表示它。
模拟信号是随电压连续变化的。要数字化这种信号,需要周期性地测量信号的电压,并记录合适的数值,这一过程称为采样,最后得到的不是连续的信号,而是表示不同电平的一系列数字。用存储的电压值创建一个新的连续电信号,可以使声音再生。假设,原始信号中的电平是均匀地从一个存储的电压值变化到下一个电压值的。如果在短时间内采集到了足够多的样本,那么这种假设是合理的。但毫无疑问,采样过程会丢失信息。
- 塑胶唱片是声波的模拟表示法。
- 激光唱片(CD)则存储了数字化的音频信息。
3.4.1 音频格式
包括:WAV、AU、AIFF、VQF和MP3等
目前统治地位的是MP3,因为它的压缩率比同时期的其他格式的压缩率高。即使将来能证明其他格式更有效,但现在MP3是大众的最爱。
3.4.2 MP3音频格式
MP3是MPEG-2 audio layer 3的缩写,MPEG是Moving Picture Experts Group(运动图像专家组)的缩写,这是为数字音频和视频开发压缩标准的国际委员会。
MP3格式使用有损压缩和无损压缩两种方式。首先,它将分析频率展开,与人类心理声学(研究耳朵和大脑之间的互相关系)的数学模型进行比较,然后舍弃那些人类听不到的信息,再用赫夫曼编码进一步压缩得到的位流。
3.5 图像与图形表示法
3.5.1 颜色表示法
颜色是我们对到达视网膜的各种频率的光的感觉。我们的视网膜有三种颜色感光视锥细胞,负责接收不同频率的光。这些感光器分类分别对应于红、绿和蓝三种颜色。人眼可以觉察的其他颜色都能有这三种颜色混合而成。
在计算机中,颜色通常用RGB(red-green-blue)值表示,这其实是三个数字,说明了每种原色的相对份额。如果用0到255的数字表示一种元素的份额,那么0表示这种颜色没有参与,255表示它完全参与其中。
- 色深度是用于表示颜色的数据量。
- 增强彩色指色深度为16位的颜色。
- 真彩色指色深度为24位的颜色。
RGB值中的每个数字由8位表示,即每个数所属的范围是0~255,这样能够生成1670万种以上的颜色。24位真彩色提供的颜色比人眼能够分辨的颜色多。此外,显示器能显示的颜色也受限于特定的色深度。
3.5.2 数字化图像与图形
- 像素:用于表示图像的独立点,代表图像的元素。
- 分辨率:用于表示图像的像素个数。
- 光栅图形格式:逐个像素存储图像信息的格式.
光栅图形格式有:位图(BMP)、GIF和JPEG。
- 位图文件是最直接的图形表示之一。除了管理一些细节外,位图文件只包括图像的像素颜色值,按照从左至右、从上到下的顺序存放。虽然位图文件支持24位的真色彩,但通常会指定色深度,以减少为文件。
- GIF格式把图像中可用的颜色数量限制在256种颜色。
- JPEG格式:保存了短距离内色调的平均值。它是存储照片颜色图像的首选格式。
- PNG格式:用来改进GIF格式,从而最终取代它,压缩效果比GIF好,色深度范围也更广。但,不支持动画,也不像GIF格式那样广受支持。
3.5.3 图形的矢量表示法
- 矢量图形:用线段和几何形表示图像的方法。
光栅图形要获得不同大小和比例的图形需要多次编码,而矢量图形可通过数学计算调整大小,需要动态计算。
矢量图形不适用于表示真实世界的图像。JPEG图像是表示真实世界图像的首选,矢量图形适用于艺术线条和卡通绘画。
目前,网络上最流行的矢量图形格式是Flash,其图像存储为二进制格式,创建Flash图像需要专用的编辑器。一种新的矢量格式SVG正在开发中,它是用纯文本表示的。一旦SVG格式完成了,矢量图形可能会成为网络成像的流行方法。
3.6 视频表示法
- 视频编译码器:用于缩减电影大小的方法。
- 时间压缩:根据连续帧之间的差别压缩电影的技术。
- 空间压缩:基于静态图像的压缩技术的电影压缩技术。