跳转至

初级——程序员

第1章 计算机系统基础知识

1.1 计算机系统的基本组成

计算机系统是由硬件系统和软件系统组成的,通过运行程序来协同工作。

计算机硬件是物理装置,计算机软件是程序、数据和相关文档的集合。

  1. 计算机硬件

    基本的计算机硬件系统由运算器、控制器、存储器、输入设备、输出设备五大部件组成,随着网络技术的发展和应用,通信部件也称为计算机系统的基本组件。

    运算器和控制器及其相关部件已被挤成在一起,统称为中央处理单元(Central Processing Unit, CPU)。CPU 是硬件系统的核心,用于数据的加工处理,能完成各种算数、逻辑运算及控制功能。

    运算器是对数据进行加工处理的部件,它主要完成算术和逻辑运算。

    控制器的主要功能则是从主存重去除指令并进行分析,控制计算机的各个部件有条不紊地完成指令的功能。

    存储器是计算机中的记忆设备,分为内部存储器(Main Memory, MM, 简称内存、主存)和外部存储器(简称外存、辅存)。相对来说,内存速度快、容量小,一般用来临时存储计算机运行时所需的程序、数据及运算结果。外存容量大、速度慢,可用于长期保存信息。寄存器是 CPU 中的存储器件,用来临时存放少量的数据、运算结果和正在执行的指令。与内存储器相比,寄存器的速度要快得多。

    习惯上将 CPU 和主存储器的有机结合称为主机。输入/输出(I/O)设备位于主机之外,是计算机系统与外界交换信息的装置。

  2. 计算机软件

    计算机软件是指为管理、运行、维护及应用计算机系统所开发的程序和相关文档的集合。

    软件是计算机系统中的重要组成部分,通常可将软件分为系统软件、中间件和应用软件。

    系统软件的主要功能是管理系统的硬件和软件资源,应用软件则用于解决应用领域的具体问题,中间件是一类独立的系统软件或服务程序,用来管理计算资源和网络通信,提供通信处理、数据存取、事务处理、Web 服务、安全、跨平台等服务。

  3. 计算机分类

    1. 个人移动设备(Personal Mobile Device, PMD)。指一类带有多媒体用户界面的无线设备,如智能手机、平板电脑等。
    2. 桌面计算机。
    3. 服务器
    4. 集群/仓库级计算机
    5. 超级计算机
    6. 嵌入式计算机

1.2 数据的表示及运算

在计算机内部,数值、文字、声音、图形图像等各种信息都必须经过数字化编码后才能被传送、存储和处理。

编码,就是采用少量的基本符号,选用一定的组合原则,来表示大量复杂多样的信息。基本符号的种类和这些符号的组合规则是一切信息编码的两大要素。

  1. 进位计数制及其转换

    在采用进位计数的数字系统中没如果只用 r 个基本符号表示数值,则称其为 r 进制(Radix-r Number System),r 称为该数制的基数(Radix)。不同数制的共同特点如下:

    1. 每一种数制都用固定的符号集。例如,十进制数制的基本符号有十个,二进制数制的基本符号有两个。
    2. 每一种数制都是用位置表示法。即处于不同位置的数符所代表的值不同,与它所在位置的权值有关。
  2. 二进制运算规则

    1. 加法:二进制加法的进位规则是“逢二进一”。
    2. 减法:二进制减法的借位规则是“借一当二”。
    3. 乘法:0×0=0 , 1×0=0 , 0×1=0 , 1×1=1
  3. 机器数和码制

    各种数据在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用 0、1 表示,小数点隐含表示而不占位置。机器数对应的实际数值称为数的真值。

    对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯整数;若约定小数点的位置在机器数的最高数值位之前(符号位之后),则是纯小数。无符号数是指全部二进制位均代表数值,没有符号位。

    为了便于运算,带符号的机器数可采用原码、反码和补码、移码等不同的编码方法。

    1. 原码表示

      数值 \(X\) 等原码记为 \([X]_{原}\),如果机器字长为 \(n\)(即采用 \(n\) 个 二进制位表示数据),则最高位是符号位,0 表示正号,1 表示负号,其余的 \(n-1\) 位表示数值的绝对值。数值零的原码表示有两种形式: \([+0]_{原}=00000000\)\([-0]_{原}=10000000\)

    2. 反码表示

      数值 \(X\) 等反码记为 \([X]_{反}\),如果机器字长为 \(n\),则最高位是符号位,0 表示正号,1 表示负号,其余的 \(n-1\) 位表示数值。正数的反码与原码相同,负数的反码则是其绝对值按位求反。数值0 的反码表示有两种形式: \([+0]_{反}=00000000\)\([-0]_{反}=11111111\)

    3. 补码表示

      数值 \(X\) 等补码记为 \([X]_{补}\),如果机器字长为 \(n\),则最高位为符号位,0 表示正号,1 表示负号,其余的 \(n-1\) 位表示数值。正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加 1。在补码表示中,0 有唯一的编码:\([+0]_{补}=00000000\)\([-0]_{补}=00000000\)

      相对于原码和反码表示,n 位补码表示法有一个例外,当符号位为 1 而数值位全部为 0 时,它表示整数\(-2^{n-1}\),即此时符号位的 1 既表示负数又表示数值。

      设计补码时,有意识地引用了模运算在数理上对符号位的处理,利用模的自动丢弃实现了符号位的自然处理。

      用补码表示数时,由于符号位和数值部分一起编码,很难从码值形式直接判断真值的大小。

    4. 移码表示

      移码表示法是在数 \(X\) 上增加一个偏移量来定义的,常用于浮点数中的阶码。如果机器字长为 n,在偏移量为 \(2^{n-1}\) 时,只要将补码的符号位取反便可获得相应的移码表示。偏移量也可以是其他值。采用移码表示时,码值大者对应的真值就大。

  4. 定点数和浮点数

    1. 定点数

      所谓定点数,就是表示数据时小数点的位置固定不变。小数点的位置通常有两种约定方式:定点整数(纯整数,小数点在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)。

      设机器字长为 n,各种码制表示下的带符号数的范围如下表所示。当机器 字长为 n 时,定点数的补码和移码可表示 \(2^{n}\) 个数,而其原码和反码只能表示 \(2^{n-1}\) 个数(0 表示占用了两个编码),因此,定点数所能表示的数值范围比较小,运算中很容易因结果超出范围而溢出。

      码制 定点整数 定点小数
      原码 \(-(2^{n-1}-1) \sim +(2^{n-1}-1)\) \(-(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)})\)
      反码 \(-(2^{n-1}-1) \sim +(2^{n-1}-1)\) \(-(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)})\)
      补码 \(-2^{n-1} \sim +(2^{n-1}-1)\) \(-1 \sim +(1-2^{-(n-1)})\)
      移码 \(-2^{n-1} \sim +(2^{n-1}-1)\) \(-1 \sim +(1-2^{-(n-1)})\)

    2. 浮点数

      浮点数是小数点位置不固定的数,浮点表示法能表示更大范围的数。

      在十进制中,一个实数可以写成多种表示形式。同理,一个二进制数也可以写成多种表示形式。

      一个含小数点的二进制数 \(N\) 可以表示为更一般的形式:

      \[ N = 2^{E} \times F \]

      其中,\(E\) 称为阶码,\(F\) 为尾数,这种表示数的方法称为浮点表示法。

      在浮点表示法中,阶码通常为带符号的纯整数,尾数为带符号的纯小数。浮点数的表示格式一般如下:

      阶符 + 阶码 + 数符 + 尾数

      很明显,一个数的浮点表示不是唯一的。当小数点的位置改变时,阶码也相应改变,因此可以用多种浮点形式表示同一个数。

      浮点数所能表示的数值范围主要由阶码决定,所表示数值的精度则由尾数决定。

      为了提高数据的表示精度,当尾数的值不为 0 时,规定尾数域的最高有效位应为 1,这称为浮点数的规格化表示,否则修改阶码同时左移或右移小数点的位置,使其变为规格化数的形式。

      简单来说,规格化就是将尾数的绝对值限定在区间 \([0.5,1]\)

      1. 若尾数 \(F \ge 0\),则其规格化的尾数形式为 \(F=01 \times\times\times\cdots\times\),其中 \(\times\) 可为 0,也可为 1,则将尾数 F 的范围限定在区间 \([0.5,1)\)
      2. 若尾数 \(F < 0\),则其规格化的尾数形式为 \(F=10 \times\times\times\cdots\times\),其中 \(\times\) 可为 0,也可为 1,则将尾数 F 的范围限定在区间 \((-1,-0.5]\)
    3. 工业标准 IEEE 754

      IEEE 754 匙油 IEEE 制定的有关浮点数的工业标准,被广泛采用。该标准的表示形式如下:

      S P M

      其中,S 为数的符号位,为 0 时表示正数,为 1 时表示负数;P 为指数(阶码),用移码表示(偏移值为 \(2^{p-1}-1\)\(p\) 为阶码的位数);\(M\) 为尾数,用原码表示。

      对于阶码为 0 或 255 的情况,IEEE 754 标准有特别的规定:

      • \(P\) 为 0 且 \(M\) 为 0,则表示真值 \(\pm 0\) (正负号和数符位有关)。
      • 如果 P = 255 并且 M 是 0,则这个数的真值为 \(\pm \infty\) (与符号位有关)
      • 如果 P = 255 并且 M 不是 0,则这不是一个数(NaN)

      目前,计算机中主要使用 3 种形式的 IEEE 754 浮点数,如下表所示:

      参数 单精度浮点数 双精度浮点数 扩充精度浮点数
      浮点数字长 32 64 80
      尾数长度 23 52 64
      符号位长度 1 1 1
      阶码长度 8 11 15
      指数偏移量 +127 +1023 +16 383
      可表示的实数范围 \(10^{-38} \sim 10^{38}\) \(10^{-308} \sim 10^{308}\) \(10^{-4932} \sim 10^{4932}\)

      在 IEEE 754 标准中,对于单精度浮点数和双精度浮点数,约定小数点左边隐含有一位,通常这位数就是 1,因此尾数为 \(1.\times\times\cdots\times\)

  5. 十进制数与字符的编码表示

回到页面顶部