计算机系统基础知识
- 1. 计算机系统基本组成
- 2. 数据表示及运算
- 2.1 数据表示
- 进位计数值及其转换
- 机器数和码制
- 定点数和浮点数
- 十进制编码
- ASCII码
- 汉字编码
- Unicode
- 2.2 校验码
- 2.3 逻辑代数及运算
- 2.4 机器数的运算
- 机器数的加减运算
- 机器数的乘除运算
- 浮点运算
1. 计算机系统基本组成
计算机系统由硬件和软件组成,通过运行程序来协同工作。计算机硬件是物理装置,计算机软件是程序、数据和相关文档的集合。
- 计算机硬件
由**运算器、控制器、存储器、输入设备(把数据输入计算机)和输出设备(把计算机中数据展示出来)**组成。
运算器和控制器及其相关部件集成在一起,统称为中央处理器(Central Processing Unit,CPU).CPU是硬件核心,用于数据的加工处理、能完成各种运算和控制功能。- 运算器:对数据进行加工处理的部件,主要完成算术和逻辑运算。
- 控制器:从主存中取出指令并进行分析,控制计算机各个部件有条不紊的完成指令的功能。
- 存储器:分为内存和外存。
- 主机:CPU 和存储器的有机组合。
- 计算机软件
计算机软件为管理、运行、维护及应用计算机系统所开发的程序和相关文档的集合。- 系统软件:管理系统的硬件和软件资源;
- 中间件:独立的系统软件或服务程序,常用于管理计算资源和网络通信,提供通信处理、数据存取、事务处理、Web服务、安全、跨平台等服务;
- 应用软件:用于解决领域的具体问题。
- 计算机分类:个人移动设备、桌面设备、服务器、集群/仓库级计算机、超级计算机和嵌入式计算机。
2. 数据表示及运算
2.1 数据表示
进位计数值及其转换
- 二进制、八进制、十进制和十六进制的表示:
计数制 | 基数 | 符号 | 形式表示符 | 示例 |
---|---|---|---|---|
十进制 | 10 | 0-9 | D | 123, 456, 789 |
二进制 | 2 | 0, 1 | B | 1010, 1101, 0011 |
八进制 | 8 | 0-7 | O | 123, 567, 450 |
十六进制 | 16 | 0-9, A-F | H | 1A3, 4F5, 6ED |
- 十进制与二进制之间转换
十进制整数转换为二进制整数方法是“除2取余”,十进制小数转换为二进制小数方法是“乘2取整”。
二进制转十进制的方法是:将二进制的每一位数乘以它的权,然后相加。
NOTE:八进制和十六进制转与十进制之间转化类似。 - 二进制、八进制和十六进制之间对应关系
二进制数 | 八进制数 | 十六进制数 |
---|---|---|
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 10 | 8 |
1001 | 11 | 9 |
1010 | 12 | A |
1011 | 13 | B |
1100 | 14 | C |
1101 | 15 | D |
1110 | 16 | E |
1111 | 17 | F |
机器数和码制
机器数:数据在计算机中的表示,采用二进制计数制,数的符号用0、1表示,小数点隐含表示而不占位置。机器数的最高位表示正、负符号位,其余位则表示数值。
-
原码
原码是最简单的表示方式,包括符号位和数值位。符号位位于最高位,用0表示正数,用1表示负数,其余位表示数值的大小。
正数:其原码就是其二进制本身。
负数:其原码是符号位为1,数值部分取该数绝对值的二进制。 -
反码
反码也是包括符号位和数值位的一种表示方式。对于正数,其反码与原码相同;对于负数,其反码是符号位为1,其余位是原码取反。
正数:反码与原码相同。
负数:反码是符号位不变,其余位取反。 -
补码
补码是在反码的基础上形成的,也是目前计算机中最常用的数值表示方式。对于正数,其补码与原码和反码相同;对于负数,其补码是符号位为1,其余位是原码取反后加1。
正数:补码与原码和反码相同。
负数:补码是符号位为1,其余位是原码取反后加1。
补码的优势在于能够表示更多的数值,特别是可以表示-128(在8位二进制中),并解决了0的符号表示问题。此外,补码还允许计算机中的加法和减法运算使用相同的硬件电路。 -
移码
移码(又称增码或偏置码)通常用于表示浮点数的阶码。其表示形式与补码相似,但符号位相反,即用1表示正数,用0表示负数,数值部分与补码相同。
正数:移码的最高位(符号位)为1,其余位与补码相同。
负数:移码的最高位(符号位)为0,其余位是补码取反(实际上因为数值部分与补码相同,所以这部分不变,只是符号位取反)。
移码主要用于浮点数的阶码表示,以简化浮点数的比较和排序操作。
定点数和浮点数
-
定点数(Fixed-Point Number)
定点数是一种表示固定小数位数的数值类型。它通常表示为一个有符号的整数部分和一个小数部分,小数点的位置是固定的。定点数既可以用于表示整数,也可以用于表示小数。但在固定位数下,小数点的位置是预先设定的,因此其表示的数值范围和精度是有限的。
-
浮点数
浮点数是一种小数点位置不固定的数,能够表示更大范围的数值。
浮点数采用类似科学计数法的表示方法,即一个数N可以表示为N = M × b^E的形式,其中M是尾数(mantissa),b是基数(通常为2),E是指数(exponent)。
精度可变:浮点数的精度可以随着数值的大小而改变,能够表示很大或很小的数值,但在表示小数时可能存在精度损失。
表示范围广泛:浮点数可以表示比定点数更大范围的数值。
运算复杂:浮点数的运算比定点数复杂,因为需要处理阶码和尾数的运算。
内存占用:浮点数通常需要更多的内存空间来存储,因为需要额外的位来表示指数和尾数。 -
工业标准IEEE 754
IEEE 754标准定义了浮点数的格式,包括符号位(sign bit)、指数位(exponent bits)和尾数位(mantissa bits)。符号位位于最高位,用于表示浮点数的正负。指数位用于表示浮点数的规模,是一个有偏指数(biased exponent),通过加上一个固定偏置来进行编码。尾数位也称为分数位或有效数字位,用于表示浮点数的精度。
十进制编码
余3码:在8421码的基础上,把每个数的代码加上0011后构成。
格雷码:相邻的两个代码之间只有一位不同。
ASCII码
汉字编码
汉字编码是汉字标准规范中的一个专门术语,是指通用规范汉字表中的汉字顺序码。其目的是为了解决汉字如何输入计算机的问题,因为电子计算机现有的输入键盘与英文打字机键盘完全兼容,无法直接输入非拉丁字母的文字(包括汉字)。
汉字编码根据应用目的的不同,主要分为外码、交换码、机内码和字形码等。其中,外码也叫输入码,是用来将汉字输入到计算机中的一组键盘符号,如拼音码、五笔字型码、自然码等。
- 常见的汉字编码标准(内部码)
- GB2312:中国最早的汉字编码标准之一,由国家标准总局发布,1981年5月1日实施。它包含了基本的汉字、符号、数字等共7445个字符,主要用于简体中文字符的处理和表示,广泛应用于计算机系统、通信设备等领域。
- GBK:GB2312的扩展版本,包含了更多的汉字、符号、数字等,共收录了21886个字符,可以表示繁体中文和日文汉字等其他字符,因此在大陆地区和香港地区都有广泛的应用。
- GB18030:中国国家标准局于2000年发布的新一代中文编码标准,包含了GB2312和GBK编码中的所有字符,以及繁体中文、日文汉字、朝鲜语等字符,共收录了27484个字符。
- UTF-8:一种可变长度的Unicode编码方式,可以表示Unicode字符集中的任意字符,包括中文字符。UTF-8编码不仅可以用于中文字符的处理和表示,还可以表示其他语言的字符,因此在国际化应用中得到了广泛的应用。
- Big5:一种汉字编码方式,主要用于繁体中文的处理和表示,是台湾地区广泛使用的汉字编码方式之一。
- 字形码:表示汉字字形的字模数据,通常用点阵、矢量函数等方式显示。
Unicode
Unicode是一种字符编码标准,用于将字符集中的每一个字符分配一个唯一的数字(代码点),以便在计算机系统中进行存储、处理和交换。Unicode包含了世界上几乎所有语言所需的字母、数字、标点符号和符号,被广泛应用于各种操作系统、编程语言和技术标准中。(可扩充)
**背景:**随着计算机技术的快速发展,不同国家和地区之间的信息交流日益频繁,传统的字符编码方案(如ASCII、GB2312、Big5等)已经无法满足需求。为此,国际标准化组织(ISO)开始着手制定一种统一的字符编码标准,即Unicode。
- Unicode字符的编码方式一般有三种:UTF-8、UTF-16、UTF-3234。
- UTF-8:一种可变长度的Unicode编码方式,每个字符可能占用1到4个字节。UTF-8编码具有节省空间、兼容ASCII编码等优点,因此在互联网和文件系统中得到了广泛应用。
- UTF-16:一种定长编码方案,用于在字处理器、文本编辑器和Windows操作系统中表示Unicode字符。UTF-16编码对于大部分常用字符(如英文字符和常用中文字符)非常高效,但对于一些特殊字符(如表情符号)则需要使用两个16位编码单元(即4个字节)来表示。
- UTF-32:一种定长编码方案,用于在程序中存储和处理Unicode字符。UTF-32编码对每个字符都使用4个字节来保存,虽然编码简单,但会造成空间的极大浪费。
2.2 校验码
校验码(Check Code或Error Detection Code)是一种附加在数据末尾的冗余信息,用于检测或纠正数据传输或存储过程中产生的错误。其主要功能是确保数据的完整性和正确性,防止由于噪声、干扰或其他原因导致的数据错误。
- 校验码的原理通常包括以下几种方式:
- 奇偶校验:通过添加一个额外的位(0或1),使得数据中1的总数为奇数(奇校验)或偶数(偶校验)。奇偶校验位可以检测单个位的错误。
- 循环冗余校验(CRC):通过将数据视为一个大的多项式,并将其除以一个固定的“生成多项式”,得到的余数作为CRC校验码。CRC能够检测到多位错误,并具有较高的错误检测能力。
- 校验和:将数据分成固定大小的段,然后将这些段相加(有时还会进行其他操作),最后可能对结果取反或进行其他处理以生成校验和。校验和能够检测数据中的错误,但其错误检测能力不如CRC。
- 海明码:一种错误纠正码,通过在数据中添加冗余位,不仅可以检测错误,还能确定错误的位置并进行纠正。
2.3 逻辑代数及运算
- 逻辑运算:与.、或+、非-、异或。
- 逻辑公式
2.4 机器数的运算
机器数的加减运算
Note:计算机内部通常只设置加法器,减法运算转化为加法运算进行。
- 原码加减法
加法:相同符号的原码相加,数值部分直接相加,运算结果与两个加数的符号相同。
减法:先比较两个数绝对值的大小,然后用绝对值大者的绝对值减去绝对值小者的绝对值,结果的符号取绝对值大者的符号。 - 补码加减法
补码加减法的规则如下:
- 参加运算的操作数用补码表示;
- 符号位参加运算;
- 若进行相加运算,则两个数的补码直接相加;若进行相减运算,则将减数连同其符号位一起变反后加1后与被减数相加。
- 运算结果用补码表示。
与原码减运算相比,补码减运算的过程要简便很多。在补码加减运算中,符号位和数值位一样参加运算,无需做特殊处理。因此多数计算机都采用补码加减法运算法。
- 溢出及判定
两个同符号的数相加,或者相异符号数相减,运算结果有可能溢出。
溢出检测机制:进位判决法和双符号判决法。
机器数的乘除运算
纯软件方案;
硬件方案;
设置专用的硬件阵列乘法器或除法器。
浮点运算
浮点运算的步骤
浮点数的加减运算通常包括以下几个步骤:
- 对阶:使两个操作数的阶码相同,以便进行尾数的加减运算。
- 尾数加减:将两个操作数的尾数进行加减运算。
- 规格化:将尾数加减的结果进行规格化处理,以满足IEEE 754标准对尾数的要求。
- 舍入:对尾数进行舍入处理,以减小舍入误差。
- 溢出判断:判断运算结果是否溢出,并进行相应的处理。