陈驭骐2020/10/11
第2章 二进制数值与记数系统
本章简述了记数系统并举出了几个例子,由二进制引入了计算机的“位”、“字节”和“字”
位置记数法:最左边的数位表示它的值乘以基数的零次幂,紧挨着这个数位的左边的数位表示它的值乘以基数的1次幂,接下来的数位表示它的值乘以基数的2次幂,再接下来的数位表示它的值乘以基数的3次幂,以此类推。
十进制以上的进制会引入字母,如【十六进制】系统中的十六个数字如下所示:
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
转化过程中牢记字母数字表示的数值并加以运用即可,其他并无太多变化。
要用任何基数表示基数值,只需要两个数字。0位于最右边,1在0的左边,这个数字表示基数值本身。
其他记数系统中的运算与十进制中的相似,同样存在进位、借位等操作,只不过依基数而变化。
二进制数与八进制数间的特殊关系:给定一个八进制数(如754),将它的每个数位都替换成这个数位的二进制表示,并按原次序排列,就可以得到其对应的二进制数(7——111,5——101,4——100,754——111101100)。原理是8是2的幂,故十六进制与二进制也有类似关系。
二进制对于计算机有极其重要的意义(虽然早期计算机是十进制机器),所有信息都是由二进制数值表示的,应为0和1正好对应每个存储位状态中的高电平和低电平两种信号。注意,存储位不能是空的,必须存放0或1.
二进制数字:一个存储单元,可以是0或1
位:同上
字节:位的集合(8个二进制位)
字:字节的集合(含一个字节),字中的位数称为计算机的字长
第3章 数据表示法
模拟数据完全对应于我们周围连续无线的世界。因此,计算机不能很好地处理模拟数据。我们需要数字化(digitize)数据,吧信息分割成片段并单独表示每个片段。
二进制因其与储存状态的料号对应性和廉价可靠行,成为了现代计算机大量使用和管理的记数系统。
一般说来,n位二进制数字能表示2^n种状态。每当可用的位数增加以为,可以表示的状态的数量就会多一倍。
负数的表示:二进制补码
表示方法:去数字的正值,将所有1变成0,将所有的0变成1,再对得到的数加1,最终所得的数即为开始所取数字的负数。
浮点表示法——不易简述,直接上例子
例:将十进制中的0.75转化成二进制的过程
0.752=1.50
0.502=1.00
故十进制中的0.75是二进制中的0.11
解释环节:先用0.75乘以基数2,取所得数字的小数部分(0.50)再乘以2,直到得到小数点后的0(1.00)即可停止,然后取所得的一系列数的整数部分(11),在最前面加上小数点即可得到结果(0.11).
再举一个栗子:将十进制中的0.435换算成二进制
0.4352=0.870
0.8702=1.740
0.7402=1.480
0.4802=0.960
0.9602=1.920
0.9202=1.840
…
故十进制中的0.435是二进制中的0.011011…
文本表示法
字符集(character set):字符和表示它们的代码的清单。
ASCII字符集
ASCII是美国信息交换标准代码(American Standard Code for Information Interchange)的缩写。最初,ASCII字符集用7位表示每个字符,可以表示128个不同的字符。每个字节中的第八位最初被用作校验位,协助确保数据传输正确。之后,ASCII字符集进化了,用8位表示每个字符。这个8位版本的正式名字是Latin-1扩展ASCII字符集。该扩展字符集可以表示256个字符,包括一些重点字符和几个补充的特殊符号。每个ASCII字符都有自己的顺序,这是由存储它们所用的代码决定的。每个字符都有一个相对于其他字符的位置(在其他字符之前或之后)。这个属性在许多方面都很有用。例如,可以利用字符代码对一组单词按照字母顺序排序。
Unicode字符集
ASCII字符集的扩展版本提供了256个字符,虽然足够表示英语,但是却无法满足国际需要。这种局限性导致了Unicode字符集的出现,这种字符集具有更强大的国际影响。
Unicode的创建者的目标是表示世界上使用的所有语言中的所有字符,包括亚洲的表意符号。此外,它还表示了许多补充的专用字符,如科学符号。
现在,Unicode字符集被许多程序设计语言和计算机系统采用。一般情况下,每个字符的编码都为16位,但也是十分灵活的,如果需要的话每个字符可以使用更多空间,以便表示额外的字符。Unicode字符集的一个方便之处就是它把ASCII字符集作为了一个子集。
为了保持一致,Unicode字符集被设计为ASCII的超集。也就是说,Unicode字符集中的前256个字符与扩展ASCII字符集中的完全一样,表示这些字符的代码也一样。因此,即使底层系统采用的是Unicode字符集,采用ASCII值的程序也不会受到
文本压缩
字母信息(文本)是一种基本数据类型。因此,找到存储这种信息以及有效地在两台计算机之间传递它们的方法是很重要的。
相关方法
1.关键词编码(keyword encoding):用单个字符代替常用的单词。
缺点:有的用来代替单词的字符会与其原义产生歧义,如$
2.行程长度编码(run-length encoding):把一系列重复字符替换为它们重复出现的次数。(长度小于或等于3的字符串不值得被编码)
3.赫夫曼编码(Huffman encoding):用变长的二进制串表示字符,使常用的字符具有较短的编码。
音频数据表示法
要在计算机上表示音频数据,必须数字化声波,把它分割成离散的、便于管理的片段。方法之一是真正数字化声音的模拟表示法。也就是说,采集表示声波的电信号,并用一系列离散的数值表示它。
图像与图形表示法
1.颜色表示法:RGB值
2.数字化图像与图形
照片是图像的模拟表示。它的表面是连续的,一种颜色的色度与另一种颜色的混合在一起。数字化一幅图像是把它表示为一个独立的点集,这些点称为像素,代表图像的元素。每个像素由一种颜色构成。表示一幅图像使用的像素个数称为分辨率。如果使用了足够多的像素(高分辨率),把它们按正确的顺序并排排列,就可以瞒过人眼,使人们认为看到的是连续的图像。
像素(pixel):用于表示图像的独立点,代表图像的元素。
3.图形的矢量表示法
光栅图形(如GIF图形)要获得不同的大小和比例必须进行多次编码,矢量图形则可以通过数学计算调整大小,这些改变可以根据需要动态地计算。
但是,矢量图形不适用于表示真实世界的图像。JPEG图像是表示真实世界图像的首选,矢量图形则适用于艺术线条和卡通绘画。
当前,网络上最流行的矢量图形格式是Flash。Flash图像存储为二进制格式,创建Flash图像需要专用的编辑器。一种新的矢量格式SVG(Scalable Vector Graphics,可缩放矢量图形)正在开发中,它是用纯文本表示的。一旦SVG格式完成了,矢量图形可能会成为网络成像的流行方法。
4.视频表示法
编译码器(codec)表示压缩器/解压缩器(COmpressor/DECompressor)。视频编译码器指用于缩减电影大小的方法,使电影能够在计算机或网络上播放。几乎所有的视频编译码器都采用有损压缩,以最小化与视频相关的数据量,因此,压缩的目标不是舍弃影响观众视觉的信息。
视频编译码器(video codec):用于缩减电影大小的方法。
时间压缩(temporal compression):根据连续帧之间的差别压缩电影的技术。
时间压缩将查找连续帧之间的差别。如果两个帧中的图像大部分都没有改变,那么何必浪费空间来复制所有近似的信息呢?关键帧是比较帧之间差别的参照物,它的完整图像都会被保存。对于连续的图像,只保存改变的部分(增量帧)。对于帧与帧之间变化不大的视频片段(如几乎没有活动实体的场景),时间压缩是一种有效的方法。
空间压缩(spatial compression):基于静态图像的压缩技术的电影压缩技术。
空间压缩将删除一个帧中的冗余信息。空间压缩的基本问题与压缩静态图像时遇到的问题一样。空间视频压缩常把颜色相同的像素(如湛蓝的天空)聚集在块(矩形区域)中,存储的不是每个像素的信息,而是块的颜色和坐标。这种思想与前面介绍的行程长度编码的思想近似。
学习中遇到的问题与解决过程
刚开始由于看的比较快,我没看懂第三章中的浮点表示法,尤其是十进制转二进制的那个问题。为了解决这个问题,我干脆先抛开书本的理论,直接观察那一串计算过程和答案,找出了其在位置上存在的特殊性和对应关系,于是我暂时能够完成计算过程了。但为了搞懂其具体原理,我翻开书再与计算做对照,有了计算的基础,结合之前提到的“符号尾数10^exp”公式,再看书上的理论便恍然大悟。