Skip to content

课件 - 计算机系统I | Sec 01-3

课件预览

新窗口打开 / 下载

qianwen-plus:

好的,这是为您生成的《计算机系统基础:数据表示》课程(Lec01-3-24.pptx)的逐页详细翻译与解释笔记。


第 1 页:无符号与有符号数值 (Unsigned & Signed Numeric Values)

  • 标题: 无符号与有符号数值
  • 核心概念:
    • 等价性 (Equivalence): 对于非负数,其无符号编码和补码(Two's Complement)编码是完全相同的。
    • 单值性 (Uniqueness):
      • 每一个位模式(bit pattern)都对应一个唯一的整数值。
      • 每一个可表示的整数都有一个唯一的位编码。
      • 这意味着转换映射是可逆的:U2B(x)=B2U1(x) (无符号转二进制及其逆运算),T2B(x)=B2T1(x) (补码转二进制及其逆运算)。
  • 图表解释 (4位示例):
    • 表格展示了4位二进制数从 00001111 的两种解读。
    • 非负部分 (0000 - 0111): 无符号和有符号的值相同 (0 到 7)。
    • 负数部分 (1000 - 1111):
      • 无符号解读为 8 到 15。
      • 有符号(补码)解读为 -8 到 -1。
    • 关键点: 最高位(MSB)在有符号数中作为符号位,权重为 2w1;在无符号数中权重为 +2w1

第 2 页:符号扩展 (Sign Extension)

  • 标题: 符号扩展
  • 任务: 将一个 w 位的有符号整数转换为 w+k 位,同时保持其数值不变。
  • 规则: 复制 k 份符号位(即最高有效位 MSB)填充到新的高位。
    • 公式:X=xw1,,xw1k copies,xw1,xw2,,x0
  • 解释:
    • 如果原数是正数(MSB=0),高位补0。
    • 如果原数是负数(MSB=1),高位补1。
    • 这保证了扩展后的数在补码表示下与原数相等。

第 3 页:乘法 (Multiplication)

  • 标题: 乘法
  • 内容: 展示了二进制乘法的几个例子,包括正数和负数。
  • 示例解析:
    • 4×1: 简单的位移和相加。
    • 4×(7):
      • 4 表示为 0100
      • -7 (4位补码) 表示为 1001
      • 乘法过程涉及部分积的生成和累加,注意负数的部分积需要进行符号扩展。
      • 结果 -28 表示为 11100100 (8位补码)。
    • (4)×(7):
      • 结果为 28。
      • 演示了如何通过补码运算得到正确的正数结果。
  • 关键点: 补码乘法可以直接使用与无符号乘法类似的硬件逻辑,但需要正确处理符号扩展和部分积的符号。

第 4 页:免责声明 (Disclaimer)

  • 内容: 声明本讲座使用的部分图片和资源收集自互联网,仅用于教育目的,版权归原始所有者所有。部分幻灯片内容参考了 CMU 的 CSAPP 课程和浙大董亚波教授的课程。

第 5 页:数值数据表示概览 (Representation of Numeric Data)

  • 标题: 数值数据表示
  • 主要内容:
    • 定点数表示 (Fixed-point):
      • 整数表示 (Representation of integers)
      • 十进制数字的二进制编码 (Binary codes for decimal digits)
    • 浮点数表示 (Floating-point)
  • 图示: 展示了一个通用的定点数结构,小数点固定在某个位置,左边是整数部分 (2i),右边是小数部分 (2j)。

第 6 页:反思二进制小数 (Reflect on Fractional Binary Numbers)

  • 标题: 反思二进制小数
  • 核心思想:
    • 二进制小数点右边的位代表 2 的负幂次。
    • 可以表示有理数 V=x×2y
    • 优点: 非常适合表示非常大 (|V|0) 或非常接近零 (|V|1) 的数。
    • 本质: 是对实数的近似表示。
  • 问题:
    • 如何处理无穷大/小?
    • 从程序员角度看,可能觉得晦涩难懂。

第 7 页:二进制小数的局限性 (Limitation of Fractional Binary Numbers)

  • 标题: 二进制小数的局限性
  • 局限性 1 - 近似表示:
    • 只能精确表示形如 x/2k 的数值。
    • 其他有理数(如 1/3, 1/5, 1/10)会有无限循环的二进制表示。
    • 示例:
      • 1/3=0.010101...2
      • 1/5=0.00110011...2
      • 1/10=0.000110011...2
  • 局限性 2 - 实现问题:
    • 位宽有限 (w 位)。
    • 小数点位置固定,导致表示范围受限(难以同时表示极大和极小的数)。
    • 例子: 如何表示 123.456?如果小数点固定,要么整数部分不够,要么小数部分精度不够。

第 8 页:浮点数表示 (Floating-point Number Representation)

  • 标题: 浮点数表示
  • 大纲:
    • IEEE 浮点标准:定义、示例与性质。
    • 舍入、加法、乘法。
    • C 语言中的浮点数。
    • 总结。

第 9 页:IEEE 浮点标准 (IEEE Floating Point)

  • 标题: IEEE Standard 754
  • 历史与设计:
    • 由 William Kahan (1989年图灵奖得主) 从1976年开始为 Intel 设计。
    • 1985年确立为浮点运算的统一标准。
    • 特点: 快速、易于实现、精度损失小、优雅易理解。
    • 现状: 所有主流 CPU 都支持。
    • 背景: 在此之前存在多种私有格式,且不太关注精确性。该标准由数值分析专家主导制定,优先考虑数值计算的可靠性(如优雅的舍入、溢出、下溢处理),而非纯粹的硬件速度。

第 10 页:数值形式与编码 (Numerical Form & Encoding)

  • 标题: 浮点数表示
  • 数值形式: V=(1)s×M×2E
    • s (Sign): 符号位,0为正,1为负。
    • M (Significand): 尾数,通常是 [1.0,2.0) 范围内的二进制小数。
    • E (Exponent): 阶码,决定数值的量级 (2E)。
  • 编码结构:
    • s: 1位,符号位。
    • exp: 阶码字段,编码 E (但不等于 E,通常采用偏置表示)。
    • frac: 小数字段,编码 M (但不等于 M,通常隐含前导1)。

第 11 页:精度格式 (Precisions)

  • 标题: 精度
  • 三种主要格式:
    • 单精度 (Single): 32位 (1位符号 + 8位阶码 + 23位尾数)。
    • 双精度 (Double): 64位 (1位符号 + 11位阶码 + 52位尾数)。
    • 扩展精度 (Extended): 80位 (Intel特有,1位符号 + 15位阶码 + 64位尾数)。
  • 阶码的偏置表示 (Bias):
    • 表格展示了真值、补码、移码(Bias+128, Bias+127)与机器数的关系。
    • 目的: 使用无符号整数表示有符号阶码,便于直接比较两个浮点数的大小(字典序)。
    • 单精度 Bias: 127 (2811)。
    • 双精度 Bias: 1023 (21111)。

第 12 页:规格化数 (Normalized Values)

  • 标题: 规格化数
  • 条件: exp 不全为0 且 不全为1。
  • 阶码 (E): E=ExpBias
    • Exp 是 exp 字段的无符号值。
    • 单精度 E 范围: -126 到 127。
    • 双精度 E 范围: -1022 到 1023。
  • 尾数 (M): M=1.frac
    • 隐含前导1,"免费"获得一位精度。
    • M 的范围是 [1.0,2.0)
  • 示例 (第13页内容合并解释):
    • 将 15213.0 转换为 float。
    • 1521310=111011011011012=1.11011011011012×213
    • M=1.1101101101101, frac = 11011011011010000000000 (补足23位)。
    • E=13, Exp=13+127=140=100011002
    • 符号位 s=0
    • 最终编码: 0 10001100 11011011011010000000000

第 13 页:非规格化数 (Denormalized Values)

  • 标题: 非规格化数
  • 条件: exp 全为0。
  • 目的: 解决“突然式下溢出”,填补最小规格化数与0之间的巨大空隙,实现“渐进式下溢出”。
  • 阶码 (E): E=1Bias (注意不是 0Bias,为了平滑过渡)。
    • 单精度 E=126
  • 尾数 (M): M=0.frac (隐含前导0)。
  • 特殊情况:
    • frac 也为0,则表示 0 (有 +0 和 -0)。
    • frac 不为0,则表示非常接近0的数。
  • 分布: 非规格化数之间是等间距的,确保了从最小正数到0的平滑过渡。

第 14 页:特殊值 (Special Values)

  • 标题: 特殊值
  • 条件: exp 全为1。
  • 两种情况:
    1. 无穷大 (): frac 全为0。
      • 表示溢出运算结果。
      • 例如: 1.0/0.0=+, 1.0/0.0=
    2. 非数 (NaN): frac 不全为0。
      • 表示未定义的运算结果。
      • 例如: 1, , ×0

第 15 页:规格化与非规格化值的分布 (Normalized vs. Denormalized Values)

  • 标题: 规格化与非规格化值
  • 图示解释:
    • 展示了浮点数在数轴上的分布。
    • 密度: 越接近0,数值分布越密集;数值越大,分布越稀疏。
    • Gap: 如果没有非规格化数,0 和最小规格化数 (2126) 之间会有一个巨大的空隙。非规格化数填补了这个空隙,使得最小非规格化数与0的距离等于相邻非规格化数之间的距离。

第 16 页:特殊值 (重复页)

  • 内容: 与第14页相同,再次强调无穷大和NaN的定义。

第 17 页:浮点数编码可视化 (Visualization: Floating Point Encodings)

  • 标题: 浮点数编码可视化
  • 数轴图示:
    • 从左到右依次是: , 负规格化数, 负非规格化数, -0, +0, 正非规格化数, 正规格化数, +
    • NaN 位于两端之外,表示无效值。

第 18 页:微型浮点数示例 (Tiny Floating Point Example)

  • 标题: 8位浮点数表示
  • 自定义格式:
    • 1位符号位 s
    • 4位阶码 exp (Bias = 7)。
    • 3位尾数 frac
  • 目的: 用更小的例子说明IEEE格式的原理(规格化、非规格化、0、NaN、无穷)。

第 19 页:动态范围 (Dynamic Range)

  • 标题: 动态范围 (仅正数)
  • 表格: 列出了上述8位浮点格式的部分编码及其对应的值。
    • 非规格化区: exp=0000, E=6, M=0.frac。值从 0 到 7/512
    • 规格化区: exp=0001~1110, E=Exp7, M=1.frac
    • 特殊值: exp=1111, frac=000 为
  • 关键点: 展示了从非规格化到规格化的平滑过渡(7/5128/512)。

第 20 页:值分布 (Distribution of Values)

  • 标题: 值分布
  • 示例: 6位类IEEE格式 (1位符号, 3位阶码, 2位尾数, Bias=3)。
  • 图示: 直观地展示了数值越接近0,分布越密集;数值越大,间隔越大。

第 21 页:值分布特写 (Distribution of Values close-up view)

  • 标题: 值分布特写
  • 内容: 放大查看接近0的区域,更清晰地显示非规格化数的等间距分布。

第 22 页:有趣的非负数 (Interesting Nonnegative Numbers)

  • 标题: 有趣的非负数
  • 表格: 总结了单精度和双精度浮点数的关键阈值。
    • Zero: exp=0, frac=0。
    • 最小正非规格化数: exp=0, frac=1。单精度约 1.4×1045
    • 最大非规格化数: exp=0, frac=全1。
    • 最小正规格化数: exp=1, frac=0。单精度约 1.18×1038
    • 1.0: exp=127, frac=0。
    • 最大规格化数: exp=254, frac=全1。单精度约 3.4×1038

第 23 页:编码的特殊性质 (Special Properties of Encoding)

  • 标题: 编码的特殊性质
  • 要点:
    • 浮点0与整数0: 编码相同(全0)。
    • 比较: 几乎可以使用无符号整数比较逻辑(先比符号位,再比剩余位),但需注意 -0 = +0。
    • NaN: 比较时会有问题(通常定义为大于任何值,或比较结果为假)。
    • 顺序: 非规格化 < 规格化 < 无穷。

第 24 页:浮点运算基本思想 (Floating Point Operations: Basic Idea)

  • 标题: 浮点运算基本思想
  • 公式:
    • x+fy=Round(x+y)
    • x×fy=Round(x×y)
  • 步骤:
    1. 计算精确结果。
    2. 调整以适应目标精度(可能溢出,可能需要舍入)。

第 25 页:舍入 (Rounding)

  • 标题: 舍入
  • 四种舍入模式 (以美元为例):
    1. 向零舍入 (Towards zero): 直接截断小数。
    2. 向下舍入 (Round down / ): 向负无穷方向。
    3. 向上舍入 (Round up / +): 向正无穷方向。
    4. 向偶数舍入 (Nearest Even, 默认):
      • 舍入到最接近的可表示值。
      • 关键规则: 当恰好在两个值中间时(如 1.5, 2.5),舍入到最低有效位为偶数的那个值(1.5->2, 2.5->2)。
      • 优点: 避免统计偏差(长期来看,向上和向下舍入的概率各占50%)。

第 26 页:深入理解向偶数舍入 (Closer Look at Round-To-Even)

  • 标题: 深入理解向偶数舍入
  • 解释:
    • 这是默认模式,其他模式会导致统计偏差(始终偏高或偏低)。
    • 规则应用:
      • 小于中间值:向下。
      • 大于中间值:向上。
      • 等于中间值:看前一位,奇进偶不进(使最低位变为偶数)。
    • 十进制示例: 7.895 -> 7.90 (9是奇数,进位); 7.885 -> 7.88 (8是偶数,舍去)。

第 27 页:二进制数舍入 (Rounding Binary Numbers)

  • 标题: 二进制数舍入
  • 规则:
    • "偶数": 最低有效位为0。
    • "中间值": 舍入位右侧为 100...0
  • 示例: 舍入到最近的 1/4 (保留2位小数)。
    • 2 3/32(10.000112)10.002 (小于中间值,向下)。
    • 2 3/16(10.001102)10.012 (大于中间值,向上)。
    • 2 7/8(10.111002)11.002 (中间值,11是奇数,进位变100)。
    • 2 5/8(10.101002)10.102 (中间值,10是偶数,舍去)。

第 28 页:浮点加法 (Floating Point Addition)

  • 标题: 浮点加法
  • 步骤:
    1. 对阶: 将小阶码的尾数右移,使两数阶码相同。
    2. 尾数相加: 执行有符号加法。
    3. 规格化:
      • 若结果 M2,右移尾数,阶码+1。
      • 若结果 M<1,左移尾数,阶码-k。
    4. 舍入: 根据舍入模式调整尾数。
    5. 检查溢出: 阶码是否超出范围。

第 29 页:浮点加法的数学性质 (Mathematical Properties of FP Add)

  • 标题: 浮点加法的数学性质
  • 与实数算术对比:
    • 封闭性: 否 (可能产生 或 NaN)。
    • 交换律: 是 (a+b=b+a)。
    • 结合律: ((a+b)+ca+(b+c))。
      • 例: (3.14+1e10)1e10=0, 但 3.14+(1e101e10)=3.14
    • 单位元: 是 (0)。
    • 逆元: 几乎 (除了 和 NaN)。
    • 单调性: 几乎 (除了 和 NaN)。

第 30 页:浮点乘法 (Floating Point Multiplication)

  • 标题: 浮点乘法
  • 步骤:
    1. 符号: s=s1s2
    2. 尾数: M=M1×M2
    3. 阶码: E=E1+E2
    4. 规格化: 若 M2,右移尾数,阶码+1。
    5. 舍入
    6. 检查溢出
  • 难点: 尾数乘法较复杂。

第 31 页:浮点乘法的数学性质 (Mathematical Properties of FP Mult)

  • 标题: 浮点乘法的数学性质
  • 与实数算术对比:
    • 封闭性: 否 (可能产生 或 NaN)。
    • 交换律: 是。
    • 结合律: (可能溢出)。
      • 例: (1e20×1e20)×1e20=, 但 1e20×(1e20×1e20)=1e20
    • 分配律: (可能溢出)。
      • 例: 1e20×(1e201e20)=0, 但 1e20×1e201e20×1e20=NaN
    • 单位元: 是 (1)。
    • 单调性: 几乎。

第 32 页:C语言中的浮点数 (Floating Point in C)

  • 标题: C语言中的浮点数
  • 类型: float (单精度), double (双精度)。
  • 转换:
    • double/float -> int: 截断小数(向零舍入)。溢出或NaN时行为未定义(通常设为 TMin)。
    • int -> double: 精确转换 (只要int位数 53)。
    • int -> float: 可能需舍入。

第 33 页:浮点数谜题 (Floating Point Puzzles)

  • 标题: 浮点数谜题
  • 练习: 判断C表达式是否恒真。
    • x == (int)(float) x: (float只有24位尾数,大整数会丢失精度)。
    • x == (int)(double) x: (double有53位尾数,足以覆盖int)。
    • f == (float)(double) f: (从高精度转低精度再转回,若原值可表示则不变,但这里指double转float再转double,若float能表示则不变,实际上如果f本身是float变量提升为double,再转回float,是相等的)。 更正: 幻灯片答案是Yes,理由是增加精度再减回来,只要不超出float范围且舍入一致。
    • d == (float) d: (损失精度)。
    • f == -(-f): (仅改变符号位)。
    • 2/3 == 2/3.0: (左边是整数除法0,右边是浮点数)。
    • (d+f)-d == f: (不满足结合律)。

第 34 页:总结 (Summary)

  • 标题: 总结
  • 要点:
    • IEEE 754 具有清晰的数学定义 (M×2E)。
    • 运算可视为“完美精度计算后舍入”。
    • 不同于实数算术: 不满足结合律、分配律。
    • 影响: 给编译器和数值编程带来挑战。
    • 灾难案例: 提及了因数值错误导致的著名事故。

第 35 页:数值错误导致的灾难 (Disasters Attributable to Bad Numerics)

  • 标题: 数值错误导致的灾难
  • 案例 1: 爱国者导弹失败 (1991)
    • 原因: 用24位浮点数近似0.1产生的累积误差。
    • 过程: 运行100小时,误差累积达0.34秒。
    • 后果: 拦截失败,28人死亡。
  • 案例 2: 阿丽亚娜5号火箭爆炸 (1996)
    • 原因: 软件复用错误。将64位浮点数(水平速度)转换为16位有符号整数时发生溢出。
    • 背景: Ariane 4的速度不会溢出,但Ariane 5速度快5倍。
    • 后果: 起飞37秒后自毁,损失5亿美元。

第 36 页:灾难案例详解 (重复页)

  • 内容: 与第35页相同,提供了更多细节链接。

第 37 页:十进制数字的二进制编码 (Binary Codes for Decimal Digits)

  • 标题: 十进制数字的二进制编码
  • BCD码 (Binary Coded Decimal):
    • 加权码: 如 8421码 (最常用),4位二进制表示1位十进制。
      • 无效码字: 1010 ~ 1111 (6个)。
    • 非加权码: 如 余3码 (Excess-3), 格雷码 (Gray Code)
      • 格雷码特点: 相邻编码只有一位不同,减少传输错误。

第 38 页:十进制编码表 (DECIMAL CODES)

  • 标题: 十进制编码表
  • 表格: 展示了0-9的8421码、余3码、格雷码等编码形式。
  • 说明: 4位二进制有16种组合,选10种表示0-9,有多种选法,上述几种最常用。

第 39 页:格雷码与BCD运算 (Gray Code & BCD Ops)

  • 内容: 简要提及格雷码特点和BCD有自己的运算方法(略过)。

第 40 页:课程概览 (Overview)

  • 标题: 概览
  • 回顾:
    • 计算机系统介绍
    • 二进制表示
    • 算术运算
    • 数值数据表示
    • 非数值数据表示
    • 数据宽度与存储

第 41 页:非数值数据 (Non-numeric Data)

  • 标题: 非数值数据
  • 分类:
    • 数值型: 整数 (定点), 实数 (浮点)。
    • 非数值型: 字符/字符串, 逻辑值 (Bits)。
  • 视角: 底层程序员/硬件设计师视角。

第 42 页:逻辑值表示 (Representation of logical values)

  • 标题: 逻辑值表示
  • 概念:
    • 通常将一个字视为整体。
    • 有时需将 n 位数据视为 n 个独立的逻辑值 (0或1)。
    • 区分: 逻辑数据和数值数据形式相同 (0/1序列),通过指令操作码区分 (逻辑运算指令 vs 算术运算指令)。

第 43 页:ASCII字符码 (ALPHANUMERIC CODES - ASCII)

  • 标题: ASCII字符码
  • 定义: 美国标准信息交换码 (7位)。
  • 内容:
    • 94个可打印字符。
    • 34个控制字符 (如 BS, CR, STX, ETX)。
  • 用途: 文本格式、记录标记、流控制。

第 44 页:ASCII属性 (ASCII Properties)

  • 标题: ASCII属性
  • 规律:
    • '0'-'9': 0x30 - 0x39。
    • 'A'-'Z': 0x41 - 0x5A。
    • 'a'-'z': 0x61 - 0x7A。
    • 大小写转换: 翻转第6位 (bit 6)。
    • DEL: 全1 (源于打孔纸带时代,全孔表示删除)。

第 45 页:7位ASCII码表 (7 BIT ASCII CODE TABLE)

  • 标题: 7位ASCII码表
  • 内容: 完整的ASCII码表,展示了控制符、数字、字母、符号的编码。

第 46 页:Unicode

  • 标题: Unicode
  • 定义: 扩展ASCII,支持全球语言 (65,536+ 字符)。
  • 实现:
    • UTF-8 (变长,兼容ASCII,互联网最常用)。
    • UTF-16, UTF-32。

第 47 页:汉字表示 (Representation of Chinese Characters)

  • 标题: 汉字表示
  • 三种编码:
    1. 输入码: 拼音、五笔等。
    2. 机内码: 计算机内部存储处理 (通常2字节)。
      • 国标码 + 8080H (最高位设为1,区别于ASCII)。
    3. 字形码: 用于显示。
  • 流程: 输入码 -> 机内码 -> 字形码。

第 48 页:课程概览 (重复页)

  • 内容: 再次列出课程大纲,强调“数据宽度与存储”。

第 49 页:数据宽度与单位 (Data Width and Unit)

  • 标题: 数据宽度与单位
  • 位 (Bit): 最小单位。
  • 字 (Word): CPU一次处理的自然单位 (字长)。
    • 32位机器: 4字节,寻址4GB。
    • 64位机器: 8字节,寻址空间巨大。
  • 多格式支持: 支持字的分数或倍数 (如byte, half-word),总是字节的整数倍。

第 50 页:数据表示 (Data Representations)

  • 标题: 数据表示
  • 表格: C语言数据类型在不同架构下的大小 (典型32位, IA32, x86-64)。
    • 注意 longpointer 在32位和64位下的区别。

第 51 页:主存容量单位 (Unit of Main Memory Capacity)

  • 标题: 主存容量单位
  • 二进制前缀 (IEC):
    • KiB (210), MiB (220), GiB (230)...
  • 注意: 硬盘厂商常用十进制前缀 (KB=103),导致标称容量与实际可用容量有差异。

第 52 页:频率与线宽单位 (Unit of Frequency and Line Width)

  • 标题: 频率与线宽单位
  • 十进制前缀:
    • kb/s (103), Mb/s (106), Gb/s (109)...
  • 说明: 通信领域常用十进制。

第 53 页:数据存储与排列顺序 (Data Storage and Arrangement Order)

  • 标题: 数据存储与排列顺序
  • 概念:
    • LSB/MSB: 比特级的最低/最高有效位。
    • 字节序 (Byte Ordering): 多字节数据在内存中的排列。
  • 两种模式:
    • 大端 (Big Endian): 最高有效字节在低地址 (Sun, PPC, 网络协议)。
    • 小端 (Little Endian): 最低有效字节在低地址 (x86, x86-64)。

第 54 页:字节序示例 (Byte Ordering Example)

  • 标题: 字节序示例
  • 示例: 0x01234567 在内存中的存储。
    • 大端: 01 23 45 67 (地址从小到大)。
    • 小端: 67 45 23 01 (地址从小到大)。
  • 关键点: 字节序仅针对字节间排列,不影响字节内部的比特序。

第 55 页:总结 (Summary)

  • 标题: 总结
  • 回顾全书:
    • 计算机系统介绍
    • 二进制表示
    • 算术运算
    • 数值数据表示
    • 非数值数据表示
    • 数据宽度与存储
  • 结语: 理解这些底层表示对于编写正确、高效的程序至关重要。