前言:该系列文章是本人在给学生辅导本课程的过程中结合英文教材所总结的,该系列共分为30章,主要介绍了考试的核心知识点。若对A-Level CS 计算机科学考试有问题也可以私信我。
目录
二进制编码的十进制(Binary coded decimal——BCD)
关于A-Level CS 计算机科学考试
考试简介
A-Level CS 考试代号是9618(2021年之前是9608),这门课既有计算机理论又有编程,涵盖的知识点很广很杂。
A-Level CS 共分为4个部分(Paper 1 - Paper 4),每个部分考1个paper共4个paper,其中前2部分(Paper 1 和 Paper 2)是AS-Level的内容,后2部分(Paper 3 和 Paper 4)是A2的内容,每个paper满分均为75分。 编程语言可选Java、Python和VB.NET其中的一个。
考试内容
试卷 | 满 分 | 考试时长 | 考试内容 |
---|---|---|---|
Paper1 | 75分 | 1小时30分钟 | Part 1 Theory fundamentals 基础理论。包含:二进制/十进制/十六进制转换,音视频编码,模拟和数字信号,计算机网络,计算机硬件,CPU总线/汇编指令集以及计算,逻辑门及画图,汇编语言,监控系统,系统软件,职业道德,信息安全和数据库设计等。 |
Paper2 | 75分 | 2小时 | Part 2 Fundamental problem-solving and programming skills 编程和伪代码。包含:算法结构与设计,数据类型与数据结构,计算机编程基础知识(选择、循环、数组等),软件开发与测试等。 |
Paper3 | 75分 | 1小时30分钟 | Part 3 Advanced theory 高级理论。本部分包含二进制的进阶存储,互联网和路由,数字电路和触发器,CPU架构,操作系统和进程调度,计算机硬件和虚拟机,加密解密安全机制,人工智能等。 |
Paper4 | 75分 | 2小时30分钟 | Part 4 Further problem-solving and programming skills 编程和伪代码。包含:算法和数据结构(栈/链表/队列/字典/树),递归编程,文件处理和异常处理,面向对象编程,低级语言,甘特图等。 |
考试时间
CIE每年有2次考试机会,Edexcel每年有3次考试机会。
- CIE考试局考试时间:5-6月、10-11月。
- Edexcel考试局考试时间:1-2月、5-6月、10-11月。
评分情况
根据官方公布的近几年的考试情况看,CS这门科目若能拿到70%左右的分数,可以拿A;若能拿到80%左右的分数,可以拿A* 。
第1章 信息表示
本章学习内容
- 理解不同数制的基础(10进制,2进制,16进制,进制转换)
- 理解并能够以内部二进制形式表示字符数据
- 理解如何对位图或矢量图形图像的数据进行编码
- 理解声音如何表示和编码
- 理解视频流的特性
- 理解如何压缩数字数据
1.01 数字系统
我们使用1、2、3、4、5、6、7、8、9、10进行计数。这些自然数表示为可以表示为十进制(denary)或以10为底的数字系统。 如果我们学会了使用0、1、2、3、4、5、6、7、8、9进行计数,我们将更清楚地理解数字系统以10为底,因为有10个独立的、不同的符号或数字可以用来表示一个数字。 我们了解到数字的表示在右端有最低有效位。例如,将一个十进制数字写成346就有如下含义:
所有的计算机技术都是由只代表或识别两种状态的组件组成的。因此,熟悉二进制对于理解计算系统是必不可少的。二进制(binary [ˈbaɪnəri])是一种以2为基数的系统,它只使用0和1这两个符号。这些二进制数字通常被称为“位”。计算机系统内部的所有数据都使用二进制代码存储和处理。
十六进制(hexadecimal [ˌheksəˈdesɪml])数是以16为基数的,因此需要16个单独的符号来表示一个数字。所选符号为0-9,并加上A-F。表1.01给出了用八位表示的二进制数的十六进制表示法的几个例子。
表 1.01二进制数和十进制数的十六进制表示
二进制转换为十进制:要将二进制数转换为十进制数,最简单的方法是对各个位置值求和,最低有效位表示1,下一位表示2,依此类推。如图1.01。
从最低有效位开始,十进制数为
另一种方法是使用1 x 16等于2 x 8的事实,以此类推。要进行转换,从最高有效位开始,依次乘以2,然后将结果加到下一位:
十进制转换为二进制:这个过程是连续除以二,余数在每个阶段都记下来。然后将转换后的数字作为一组余数按相反顺序给出。
十进制数字246到二进制的转换:
因此,十进制数246的二进制等效值为11110110。为了检查答案是否合理,应该记住期望的是一个8位二进制数,因为在7位中可以表示的最大二进制数是2的7次方-1,即127。八位可以表示0到2的8次方-1的值,即255。
十六进制转换成二进制:分别对待每个数字,并将其转换为等效的4位二进制数,例如F转换为1111,E转换为1110,依此类推。 如果需要,可以随后将生成的二进制数转换为十进制数。例如16进制数0F可转为2进制数00001111。
二进制转换为十六进制:首先从四个最低有效位开始,然后将它们转换为一个十六进制数。然后向上移动到最高有效位,依次将四个位分组,并将每个分组转换为相应的十六进制数字。例如2进制数00001010可转为16进制数0A。
可以将一个十进制数直接转换成十六进制,但在完成转换之前先转换成二进制更容易,即10进制-2进制-16进制(适合10进制数较大时)。例如10进制数255可转为2进制数11111111,2进制数11111111可转为16进制数FF。
注意:每组四位由一个十六进制符号表示。以这种方式使用时,通常在十六进制数中包含前导零。
1.02 数字的内部编码
这里的讨论只涉及整数值的编码。第16章(第16.03节)考虑了非整数值(实数)的编码。
计算机系统中使用的编码几乎完全是基于位,八位代表一个字节。一个字节或一组字节可以表示二进制值,但同样可以表示代码。对于这两种情况,右手位被称为最低有效位,左手位被称为最高有效位或最高位。此外,字节中的位从右向左编号,从位0开始,到位7结束。
字节:作为一个单位处理的一组8位。
整数编码(Coding for integers)
计算机必须出于多种目的存储整数值。有时,仅要求存储一个无符号整数。然而,在许多情况下,编码必须识别数字是正还是负时,就需要有符号整数。无符号整数可以简单地存储为二进制数。唯一要做的决定是应该使用多少字节。如果选择使用两个字节(16位),那么可以表示的值范围是0到 216-1,即0到 65535。
如果要表示一个有符号整数,则显而易见的选择是使用一位来表示+或-号。 其余的位则代表该值。这称为“符号和大小表示”(正0负1)。但是,不能直接添加符号'-'来表示这是个负数。
原码:一个正数,按照绝对值大小转换成的二进制数就是正数的原码。
一个负数,按照绝对值大小转换成的二进制数,然后最高位补1,就是负数的原码。比如
00000000 00000000 00000000 00000101 是5的原码。
10000000 00000000 00000000 00000101 是-5的原码。
补码:计算机中二进制数表达负数的办法,这样可以在计算机中把两个数的减法变成加法。通常使用的方法是以2的补码形式存储有符号整数(因为2的补码表示法可以将加法运算规则,扩展到整个整数集,从而用一套电路就可以实现全部整数的加法。)。
1的补码(One's complement)——反码:正数和原码相同,负数是原码的绝对值按位取反。比如1用0000 0001表示,那么-1就用1111 1110表示。
2的补码(Two's complement)——补码:正数的补码和原码相同,负数的补码是反码加1。(或最低有效位的1保持不变,除了符号位以外都取反,例如10000001的补码是11111111)
负数的2的补码取反+1=对应的正数
二进制编码的十进制(Binary coded decimal——BCD)
将字节分组以表示整数的一种例外是二进制编码的十进制(BCD)方案。如果有一个应用程序需要存储或传输单个十进制数字,BCD提供了一个有效的解决方案。BCD码使用四位(半个字节)来表示一个十进制数字。一个四位代码可以表示16个不同的值,因此存在多种方案的范围。下面的讨论只考虑最简单的BCD编码,它将值直接表示为二进制数。
如果要将多于一个数字的十进制数转换为BCD,则每个十进制数字必须有一组四位。BCD有两种选择:第一种是将一个BCD码存储在一个字节中,而不使用四位。另一个选项是打包的BCD,两个4位代码存储在一个字节中。十进制数字8503可以用图1.02中所示的任一代码来表示。
有许多应用程序可以使用BCD。应用程序的明显类型是十进制数字被显示,例如在计算器的屏幕上或在数字时间显示器上或表示货币值。
如果将定点十进制值存储为BCD值,那么考虑计算机如何执行BCD算法是十分有意义的。让我们考虑一个简单的加法示例,以说明潜在问题。我们将假设一个两字节的表示形式。第一个字节代表整个数字部分的两个十进制数字,第二个字节代表小数部分的两个十进制数字。如果这两个值是$0.26和$0.85,那么结果应该是$1.11。应用BCD码的简单二进制加法将产生如图1.03所示的结果。
在第一个小数位的位置,2被加到8中得到10,但是BCD方案只识别一位十进制数的二进制码,所以加法失败。同样的问题也发生在第二个小数位的加法中。显示的结果是“点十一”,这在十进制数中是没有意义的。一个数字从一个小数位到下一个小数位的进位已被忽略。
图1.03使用BCD编码的错误加法
针对BCD算法中的这种情况,提出了一种解决方法。处理器需要认识到已经产生了一个不可能的值。我们将不考虑识别方法。解决方法是在检测到问题时添加0110。
从最低有效半字节开始(见图1.04),将0ll0加到l0ll得到10001,即四位值加一个进位。
从最低有效半字节开始(见图1.04),将0ll0加到l0ll得到10001,即四位值加一个进位。进位必须添加到下一个半字节,还必须添加0ll0来纠正错误。把1和1010相加,再加上0ll0得到10001。再次将进位加到下一个半字节中,得到正确的结果$1.11,即$0.26和$0.85之和。
第5章(5.02节)简要讨论了处理器如何识别使用二进制编码的数字进行算术运算时产生的问题。
1.03 文本内部编码
ASCII码
如果文本要存储在计算机中,就必须有一个编码方案,为文本的每个不同的单独组成项提供唯一的二进制代码。这种代码称为字符代码。在计算机中有三种重要的编码方案。其中一个,这里只顺便提及,是IBM在其计算机系统中使用的EBCDIC代码。
使用时间最长的方案是ASC-II(美国信息交换标准码)编码方案。这是国际公认的标准。ASCII编码方案有一些变体,但主要的是7位代码。通常在一个表中列出代码,表中使用了许多
表1.03显示了一个仅包含一些代码的编辑版本。第一列包含二进制代码,二进制代码存储在一个字节中,最高有效位设置为零,其余位表示字符代码。第二列给出了十六进制等价形式。
在以英语为基础的文本中可以预期使用的明显的字符类型已经包括在内。具体来说,编码表中有大小写字母、标点符号、数字和算术符号。
这里值得强调的是,这些数字代码专门用于存储、显示或打印文本。所有其他的数字编码方案都是在计算机系统内部使用的,不会在文本中使用。
有一些特殊的特性使编码方案在某些情况下易于使用。首先,数字和字母的代码在每种情况下都是按顺序排列的,例如将7的代码加1,则生成8的代码。
其次,大写字母的代码与相应小写字母的代码仅在第5位的值上不同。这使得将大写字母转换为小写字母,或将小写字母转换为小写字母,这是一个简单的操作。
统一字符编码(Unicode)
尽管ASC II代码仍被广泛使用,但它远远不能满足许多用途。因此,新的编码方案已经开发出来,并将继续进一步开发。这里的讨论描述了Unicode方案,但应该注意的是,这些方案是与通用字符集(UCS)方案一起开发的;
这些方案之间的唯一区别是为其赋予的标识名称。Unicode的目的是能够以代码形式表示任何可能的文本。尤其是包含世界上所有语言。然而,Unicode的设计使得一旦定义了一个编码集,它就永远不会改变。尤其是Unicode中的前128个字符是ASCI I代码。
Unicode有自己的特殊术语。例如,字符代码被称为“代码点”。在任何文档中,都有一种识别代码点的特殊方法。例如U+0041,它是对应于字母字符A的码位。0041是表示两个字节的十六进制字符。有趣的一点是,在已将编码标识为Unicode的文本中,对于与ASCII相对应的128个编码,只需使用一个字节的表示形式即可。为了确保这样的代码不会被误解,需要一个以上字节的代码会受到限制。图1.05显示了用于两字节代码的格式。
ASCII代码的最高有效位总是0,因此这里的两个字节表示都不会引起混淆。
1.04 图像
图像可以存储在计算机系统中,最终目的是在屏幕上显示图像或将其显示在纸上,通常作为文档的一部分。可以通过使用适当的绘图包来创建此类图像。 或者,当图像已经独立于计算机系统而存在时,可以通过使用摄影或扫描来捕获图像。
矢量图形(Vector graphics)
由绘图软件包或计算机辅助设计(CAD)软件包创建的图像通常由许多几何对象组成。结果通常是将图像存储为矢量图形文件。矢量图形:由几何公式和相关属性(例如线条颜色和样式)定义的组件组成的图形。
每个命令都有一个定义对象属性的属性列表。 这些属性包括基本几何数据,例如圆的中心位置及其半径。另外,如果合适,还可以使用诸如线条的粗细和样式,线条的颜色以及填充形状的颜色等属性定义。 此外,还定义了一些属性,例如线条的粗细和样式,线条的颜色以及填充形状的颜色(如果适用)。 图1.06显示了一个可以创建为矢量图形文件的示例。
矢量图形图像的最重要属性是,对象的尺寸不是显式定义的,而是相对于虚构的画布定义的。换句话说,图像是可伸缩的。每当要显示图像时,都会读取文件,进行适当的计算,并将对象绘制到适当的比例。如果用户随后要求以更大的比例重新绘制图像,则会再次读取文件,并在显示图像之前进行另一组计算。此过程本身不会导致图像失真。
位图(Bitmaps)
大多数图像不包括几何定义的形状,因此矢量图形表示是不合适的。通用方法是将图像存储为位图。典型的用途是通过扫描或者截屏来捕捉现有的图像。或者,可以使用简单的绘图包创建图像。创建位图文件的基本概念是,图片元素(像素)是位图图像中最小的可识别组件。图像存储为二维像素矩阵。像素本身是一个非常简单的结构;它在矩阵中有一个位置,并且有一种颜色。
图片元素(像素):位图图像的最小可识别成分,仅由两个属性定义:其在位图矩阵中的位置及其颜色。
最简单的选择是使用一个位来表示颜色,这样像素就可以是黑色或白色。将颜色存储在四位中可以进行简单的灰度着色。每个像素至少需要八位才能对彩色图像进行编码。每像素的位数有时称为颜色深度。
必须作出的另一个决定涉及图像的分辨率,它可以表示为每行像素数乘以行数的乘积。
从上述讨论可看出,位图文件并不定义像素或整个图像的物理大小。因此,图像是可伸缩的,但当图像缩放时,图像中的像素数不会改变。如图1.07所示,该图显示了原始的小图像、小图像的放大版本以及以更合理、更高分辨率创建的较大图像。
位图文件大小(Bitmap file size)
文件大小始终是图像文件的问题。 大文件占用更多的存储空间,并且需要花费更长的时间显示或通过网络传输。 矢量图形文件的大小将小于相应的位图文件的大小。 位图文件必须存储像素数据,但该文件还必须具有定义图像分辨率和像素颜色编码方案的标头。
你可以在知道分辨率和颜色深度的情况下计算位图文件的最小大小(不包括标题的大小)。 例如,考虑需要一个位图文件来填充分辨率为1366 x 768的笔记本电脑屏幕。如果颜色深度为24,则所需的位数为:
1366 * 768 * 24 = 25178112 bits
计算结果显示位数,但文件大小始终以字节数或字节倍数来引用。 因此,文件大小可以引用为:
Kibi:代表因数210(1024)的前缀,符号为Ki
Mebi:代表因数220(1048576)的前缀,符号为Mi
Gibi:代表因子230的前缀,符号为Gi
提示:对于字节的倍数,最近使用的术语已更改。 传统上,计算机科学家使用术语千字节,兆字节,千兆字节等的方式与国际单位制(SI)建立的这些前缀的定义相冲突。按照SI约定,1 KB代表1000字节。 计算机科学家已使用1 KB表示1024字节。它的编写方式有很多变体,例如Kbyte,KB或kB,但基本矛盾仍然存在。 为了解决这种不令人满意的情况,国际电工委员会(IEC)于1998年提出了有关此类数量的一组新定义。现在将1024字节标识为1 KB,其中该kibi可以被视为代表千二进制。 该建议已被其他国际标准机构接受。
1.05 声音
一个典型的声音包含大量单独的波(waves),每个波都有一个确定的频率(frequency)。结果是一种波形,其中声音的振幅以连续但不规则的模式变化。
如果需要存储声音或以电子方式传输声音,则必须将原始模拟声音信号转换为二进制代码。声音编码器包含两个组件。第一个是频带限制滤波器。这是去除高频成分所必需的。耳朵将无法检测到这些声音,如果不去掉它们,可能会导致编码问题。编码器中的另一个组件是模拟数字转换器(ADC)。
ADC的操作方法如图1.08所示。波的振幅(红线)必须定期取样。蓝色垂直线表示采样时间。振幅(amplitude)无法精确测量;取而代之的是,振幅由水平线表示的最接近的定义振幅来近似。在图1.08中,样本值1和4将是实际振幅的准确估计,因为波与振幅线接触。相反,样本5和6将不准确,因为实际振幅大约在两个最接近的定义值之间的一半。
图1.08 ADC采样
实际上,对于声音编码,必须做出两个决定。第一个是用于存储振幅值的位数,它定义了采样分辨率。如果仅使用三个位,则可以定义八个级别,如图1.08所示。如果使用的数量太少,将会有很大的量化误差。实际上,16位将为数字化声音提供合理的准确性。
另一个决定涉及采样率的选择,即每秒采集的样本数。这应该与奈奎斯特定理相一致,奈奎斯特定理规定采样频率必须至少是样本中最高频率的两倍。
同样,文件大小可能是一个问题。显然,采样率的增加和采样分辨率的提高都会导致文件大小的增加。
对于许多应用程序来说,仅仅记录声音和存储数字表示是不够的。一旦声音的数字表示存储在文件中,就可以使用声音编辑软件对其进行操作。这通常具有以下功能:
- 组合不同来源的声音
- 淡入或淡出声音
- 编辑声音以消除噪音和其他缺陷。
1.06 视频
这里的重点是视频录制的视觉方面,特别是图像在屏幕上的显示方式。可以想象,视频将非常简单地存储为一系列静止图像或帧,唯一关心的是帧速率,定义为每秒显示的帧数。实际上,这些问题要复杂得多。屏幕技术最近发生的变化并没有使它们变得更简单。操作的基本原理是逐行创建单个帧的显示。其中一个问题是解决方案的选择。分辨率可以定义为每帧的行数和每行的像素数。存储图像的分辨率和显示屏幕的分辨率之间需要兼容。然而,所使用的技术必须根据人眼的敏感度来选择。一个限制是除非屏幕每秒至少刷新50次,否则眼睛会注意到闪烁。但是,如果刷新率是每秒25次,眼睛就看不到屏幕上的任何运动实际上是不连续的。
解决这个问题的传统方法是使用隔行编码。这被用于电视广播,然后被改编成录像。每帧图像分为两半,一个包含奇数行,另一个包含偶数行。前半部分完全显示,后半部分随后显示。这就产生了一个看起来很高的刷新率,但是传输带宽需求却减少了一半。另一种方法是使用渐进编码,每次显示一个完整的帧。随着更普遍地使用改进的传输带宽,渐进编码将很可能成为常态。
1.07多媒体内容的压缩技术和打包
压缩有两类。 第一种是无损压缩(lossless compression),其中文件大小减小了但没有信息丢失,并且在必要时可以撤消该过程以重新创建原始文件。第二种是有损压缩(lossy compression),其中文件大小会有所减少,但会丢失一些信息,并且原始文件将永远无法恢复。 在许多应用中,可以结合使用无损和有损方法。
如果文件包含文本,那么压缩必须是无损的,因为不允许任何信息丢失是不明智的。一种可能的压缩方法是哈夫曼编码(Huffman coding)。用于执行压缩的过程非常详细,但原理简单。不是将每个字符编码在一个字节中,而是进行分析,以找到最常用的字符s。然后为它们提供较短的代码。 原始字节流变为位流。表1.04显示了一个可能的代码集(如果一个文本仅包含八个不同的字母)。
有损压缩可用于声音文件或图像文件可移除或修改某些详细编码的情况,此时人类的耳朵或眼睛可能几乎不会注意到任何差异。一个例子是减少位图编码的颜色深度。
总结
- 二进制代码或二进制数可记录为十六进制数。
- 有符号整数的内部编码通常基于2的补码表示。
- BCD是一种方便的单二进制数字编码方案。
- ASCII和Unicode是文本字符的标准化编码方案。
- 图像可以存储在矢量图形文件或位图文件中。
- ADC通过对连续波形进行采样来工作。
- 无损压缩允许解码器恢复原始文件;无损压缩会不可避免地丢失一些信息。
本章真题
试卷 | 题号 | 考察内容 |
9608-s20-qp-11 | 9(b) | 有损/无损压缩 |
9608-s20-qp-12 | / | / |
9608-s20-qp-13 | / | / |
9608-s19-qp-11 | 1(d),6 | 有损/无损压缩、隔行编码概念及优点、采样率和采样分辨率、压缩视频 |
9608-s19-qp-12 | 3(d),4(b) | 进制转换、给定一个字母的Unicode字符代码求另外一个字母的、渐进编码(逐行编码)概念 |
9608-s19-qp-13 | 5 | 位图和帧速率概念、隔行编码和渐进编码的区别、采样率的概念 |
文章若对您有帮助,您的打赏是对我最大的鼓励~