一、高级语言程序的执行方式
高级语言程序要被机器执行,有以下几种常见的执行方式:
- 解释执行:通过解释器逐行解释并执行源代码。
- 编译执行:通过编译器将源代码编译成机器代码,然后由计算机执行。
- 即时编译(JIT):在运行时将部分或全部代码编译为机器代码,提高执行效率。
- 虚拟机执行:在虚拟机上运行,通过虚拟机将字节码解释或编译为机器代码。
---例题:高级语言程序要被机器执行,只有用解释器来解释执行。False
二、变量赋值与内存地址
- 变量赋值是将一个值存储到一个变量中。
- 内存地址是计算机内存中的一个位置,每个变量的值都存储在内存中的某个地址上。
- 当变量被重新赋值时,它会引用一个新的内存地址。
---例题:已知 x=3, 则执行“ x=7”后,id(x)的返回值与原来没有变化。 False
三、字符编码
3.1 Unicode
特点:
- 设计目的是覆盖世界上所有的书写系统。
- 使用可变长度编码,可以表示超过100万个字符。
编码形式:
- UTF-8:可变长度(1到4个字节),向后兼容ASCII,节省空间。
- UTF-16:可变长度(2或4个字节),常用于操作系统和编程语言内部。
- UTF-32:固定长度(4个字节),直接表示所有字符,但占用空间大。
示例:
- 'A' 的 UTF-8 编码是 0x41(1字节)。
- '你' 的 UTF-8 编码是 0xE4 0xBD 0xA0(3字节)。
优势:
- 能够表示几乎所有语言的字符,具有广泛的通用性。
3.2 ASCII(American Standard Code for Information Interchange)
特点:
- 使用7位二进制表示字符,最多可以表示128个字符。
- 包含基本的英文字母(大小写)、数字、标点符号以及一些控制字符。
示例:
- 'A' 的 ASCII 码是 65。
- 'a' 的 ASCII 码是 97。
局限性:
- 仅能表示英语及一些常见符号,不能满足其他语言的需求。
---例题:UTF-8码是不等长编码,即不同字符占用的字节数不同。True
四、编程语言分类按照编程范式分类
4.1 面向过程语言
- 特点:程序由过程(函数)构成,通过过程调用完成任务。
- 示例:C。
4.2 面向对象语言
- 特点:程序由对象构成,对象包含数据和方法,通过对象的交互完成任务。
- 示例:Java、C++、Python。
---例题:不是面向对象的程序设计语言是C。True
五、原码、反码和补码
在二进制表示中,有三种常见的编码方式:原码、反码和补码。以下是它们的定义和特点:
5.1 原码
- - 正数的原码:原码与其二进制表示相同,符号位是0。
- - 负数的原码:在二进制表示的前面加上一个1作为符号位。
5.2 反码
- - 正数的反码:反码与其原码相同。
- - 负数的反码:原码除符号位外的所有位取反。
5.3 补码
- - 正数的补码:补码与其原码相同。
- - 负数的补码:反码加1。
注意:正数的原码、反码和补码都是相同的。
---例题:十进制106的原码是___,反码是___,补码是___ (用八位表示)
解析:三个都是01101010
六、基本的计算机概念
6.1二进制和数据表示
- - 二进制(Binary):计算机使用二进制(0和1)来表示和存储数据。
- - 字节(Byte):一个字节等于8位(bit)。
- - 数据类型:包括整数、浮点数、字符串、布尔值等。不同的数据类型在内存中有不同的表示和存储方式。
- 标识符规范:由数字,字母,下划线组成;不能以数字开头;区分大小写;不能使用关键字(标识符不能是 Python 的关键字或保留字,例如
if
、for
、while
等)
6.2内存和存储
- - RAM(随机存取存储器):用于临时存储数据,断电后数据会丢失。
- - ROM(只读存储器):用于存储永久性数据,断电后数据不会丢失。
- - 存储器地址:每个存储单元都有一个唯一的地址,用于访问存储器中的数据。
6.3 变量和常量
- - 变量:用于存储可以改变的数据。
- - 常量:用于存储不变的数据。
6.4运算符和表达式
- - 算术运算符:如 `+`、`-`、`*`、`/`。
- - 比较运算符:如 `==`、`!=`、`>`、`<`。
- - 逻辑运算符:如 `and`、`or`、`not`。
6.5 控制结构
- - 条件语句:如 `if`、`elif`、`else`。
- - 循环语句:如 `for`、`while`。
6.6 函数
- -定义和调用函数:使用 `def` 关键字定义函数,通过函数名调用函数。
- - 参数和返回值:函数可以接受参数并返回值。
6.7 数据结构
- - 列表(List):有序、可变的集合,如 `[1, 2, 3]`。
- - 元组(Tuple):有序、不可变的集合,如 `(1, 2, 3)`。
- - 字典(Dictionary):键值对的集合,如 `{'key': 'value'}`。
- - 集合(Set):无序、唯一元素的集合,如 `{1, 2, 3}`。
6.8 文件处理
- - 文件读写:使用 `open` 函数打开文件,`read` 和 `write` 方法读取和写入文件。
- - 文件模式:如 `r`(读)、`w`(写)、`a`(追加)。
6.9 异常处理
- - 捕获和处理异常:使用 `try`、`except` 块来捕获和处理可能发生的异常。
6.10 面向对象编程(OOP)*
- - 类和对象:使用 `class` 关键字定义类,通过类创建对象。
- - 继承:一个类可以继承另一个类的属性和方法。
- - 封装:将数据和方法封装在类中。
- - 多态:同一方法在不同对象中的不同实现。
6.11.模块和包
- - 模块:一个Python文件就是一个模块,可以包含函数、类和变量。
- - 包:包含多个模块的文件夹,通过 `import` 关键字导入模块和包。
6.12 库和框架*
- - 标准库:Python自带的模块和包,如 `math`、`datetime`。
- - 第三方库:由社区和开发者创建的库,可以通过 `pip` 安装,如 `numpy`、`pandas`。
七、进制转换(二进制)
7.1整数部分的转换
步骤:
- 用2除十进制整数,并记录商和余数。
- 再用2除上一步的商,继续记录新的商和余数。
- 重复步骤2,直到商为0为止。
- 将所有的余数按逆序排列,即从最后一次除法得到的余数开始到第一次除法得到的余数,这些逆序排列的余数就是整数部分的二进制表示。
示例: 将十进制数 45
转换为二进制:
步骤 | 操作 | 商 | 余数 |
---|---|---|---|
1 | 45 ÷ 2 | 22 | 1 |
2 | 22 ÷ 2 | 11 | 0 |
3 | 11 ÷ 2 | 5 | 1 |
4 | 5 ÷ 2 | 2 | 1 |
5 | 2 ÷ 2 | 1 | 0 |
6 | 1 ÷ 2 | 0 | 1 |
逆序排列余数得到:101101
。
所以,45
的二进制表示为 101101
。
7.2小数部分的转换
步骤:
- 乘以2,并记录整数部分。
- 将乘以2后的结果的小数部分继续乘以2,记录新的整数部分。
- 重复步骤2,直到小数部分为0或达到所需的精度为止。
- 将所有记录的整数部分按顺序排列,即从第一次乘法得到的整数部分开始到最后一次乘法得到的整数部分,这些顺序排列的整数部分就是小数部分的二进制表示。
示例: 将十进制小数 0.625
转换为二进制:
步骤 | 操作 | 整数部分 | 小数部分 |
---|---|---|---|
1 | 0.625 × 2 = 1.25 | 1 | 0.25 |
2 | 0.25 × 2 = 0.5 | 0 | 0.5 |
3 | 0.5 × 2 = 1.0 | 1 | 0.0 |
将记录的整数部分按顺序排列得到:101
。
所以,0.625
的二进制表示为 0.101
。
---例题:十进制19.625的二进制是___(整数部分用八位二进制表示)
解析:
整数部分转换
将整数部分 19
转换为二进制:
步骤 | 操作 | 商 | 余数 |
---|---|---|---|
1 | 19 ÷ 2 | 9 | 1 |
2 | 9 ÷ 2 | 4 | 1 |
3 | 4 ÷ 2 | 2 | 0 |
4 | 2 ÷ 2 | 1 | 0 |
5 | 1 ÷ 2 | 0 | 1 |
将余数逆序排列得到:10011
。
所以,整数部分 19
的二进制表示为 10011
。
小数部分转换
将小数部分 0.625
转换为二进制:
步骤 | 操作 | 整数部分 | 小数部分 |
---|---|---|---|
1 | 0.625 × 2 = 1.25 | 1 | 0.25 |
2 | 0.25 × 2 = 0.5 | 0 | 0.5 |
3 | 0.5 × 2 = 1.0 | 1 | 0.0 |
将记录的整数部分按顺序排列得到:101
。
所以,小数部分 0.625
的二进制表示为 0.101
。
所以最后答案为 00010011.101