课件 - 计算机系统I | Sec 01-3
课件预览
qianwen-plus:
好的,这是为您生成的《计算机系统基础:数据表示》课程(Lec01-3-24.pptx)的逐页详细翻译与解释笔记。
第 1 页:无符号与有符号数值 (Unsigned & Signed Numeric Values)
- 标题: 无符号与有符号数值
- 核心概念:
- 等价性 (Equivalence): 对于非负数,其无符号编码和补码(Two's Complement)编码是完全相同的。
- 单值性 (Uniqueness):
- 每一个位模式(bit pattern)都对应一个唯一的整数值。
- 每一个可表示的整数都有一个唯一的位编码。
- 这意味着转换映射是可逆的:
(无符号转二进制及其逆运算), (补码转二进制及其逆运算)。
- 图表解释 (4位示例):
- 表格展示了4位二进制数从
0000到1111的两种解读。 - 非负部分 (
0000-0111): 无符号和有符号的值相同 (0 到 7)。 - 负数部分 (
1000-1111):- 无符号解读为 8 到 15。
- 有符号(补码)解读为 -8 到 -1。
- 关键点: 最高位(MSB)在有符号数中作为符号位,权重为
;在无符号数中权重为 。
- 表格展示了4位二进制数从
第 2 页:符号扩展 (Sign Extension)
- 标题: 符号扩展
- 任务: 将一个
位的有符号整数转换为 位,同时保持其数值不变。 - 规则: 复制
份符号位(即最高有效位 MSB)填充到新的高位。- 公式:
- 公式:
- 解释:
- 如果原数是正数(MSB=0),高位补0。
- 如果原数是负数(MSB=1),高位补1。
- 这保证了扩展后的数在补码表示下与原数相等。
第 3 页:乘法 (Multiplication)
- 标题: 乘法
- 内容: 展示了二进制乘法的几个例子,包括正数和负数。
- 示例解析:
: 简单的位移和相加。 :- 4 表示为
0100。 - -7 (4位补码) 表示为
1001。 - 乘法过程涉及部分积的生成和累加,注意负数的部分积需要进行符号扩展。
- 结果 -28 表示为
11100100(8位补码)。
- 4 表示为
:- 结果为 28。
- 演示了如何通过补码运算得到正确的正数结果。
- 关键点: 补码乘法可以直接使用与无符号乘法类似的硬件逻辑,但需要正确处理符号扩展和部分积的符号。
第 4 页:免责声明 (Disclaimer)
- 内容: 声明本讲座使用的部分图片和资源收集自互联网,仅用于教育目的,版权归原始所有者所有。部分幻灯片内容参考了 CMU 的 CSAPP 课程和浙大董亚波教授的课程。
第 5 页:数值数据表示概览 (Representation of Numeric Data)
- 标题: 数值数据表示
- 主要内容:
- 定点数表示 (Fixed-point):
- 整数表示 (Representation of integers)
- 十进制数字的二进制编码 (Binary codes for decimal digits)
- 浮点数表示 (Floating-point)
- 定点数表示 (Fixed-point):
- 图示: 展示了一个通用的定点数结构,小数点固定在某个位置,左边是整数部分 (
),右边是小数部分 ( )。
第 6 页:反思二进制小数 (Reflect on Fractional Binary Numbers)
- 标题: 反思二进制小数
- 核心思想:
- 二进制小数点右边的位代表
的负幂次。 - 可以表示有理数
。 - 优点: 非常适合表示非常大 (
) 或非常接近零 ( ) 的数。 - 本质: 是对实数的近似表示。
- 二进制小数点右边的位代表
- 问题:
- 如何处理无穷大/小?
- 从程序员角度看,可能觉得晦涩难懂。
第 7 页:二进制小数的局限性 (Limitation of Fractional Binary Numbers)
- 标题: 二进制小数的局限性
- 局限性 1 - 近似表示:
- 只能精确表示形如
的数值。 - 其他有理数(如 1/3, 1/5, 1/10)会有无限循环的二进制表示。
- 示例:
- 只能精确表示形如
- 局限性 2 - 实现问题:
- 位宽有限 (
位)。 - 小数点位置固定,导致表示范围受限(难以同时表示极大和极小的数)。
- 例子: 如何表示 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)
- 标题: 浮点数表示
- 数值形式:
(Sign): 符号位,0为正,1为负。 (Significand): 尾数,通常是 范围内的二进制小数。 (Exponent): 阶码,决定数值的量级 ( )。
- 编码结构:
s: 1位,符号位。exp: 阶码字段,编码 (但不等于 ,通常采用偏置表示)。frac: 小数字段,编码 (但不等于 ,通常隐含前导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 (
)。 - 双精度 Bias: 1023 (
)。
第 12 页:规格化数 (Normalized Values)
- 标题: 规格化数
- 条件:
exp不全为0 且 不全为1。 - 阶码 (
): 。- Exp 是
exp字段的无符号值。 - 单精度
范围: -126 到 127。 - 双精度
范围: -1022 到 1023。
- Exp 是
- 尾数 (
): 。- 隐含前导1,"免费"获得一位精度。
的范围是 。
- 示例 (第13页内容合并解释):
- 将 15213.0 转换为 float。
。 ,frac=11011011011010000000000(补足23位)。 , 。- 符号位
。 - 最终编码:
0 10001100 11011011011010000000000。
第 13 页:非规格化数 (Denormalized Values)
- 标题: 非规格化数
- 条件:
exp全为0。 - 目的: 解决“突然式下溢出”,填补最小规格化数与0之间的巨大空隙,实现“渐进式下溢出”。
- 阶码 (
): (注意不是 ,为了平滑过渡)。- 单精度
。
- 单精度
- 尾数 (
): (隐含前导0)。 - 特殊情况:
- 若
frac也为0,则表示 0 (有 +0 和 -0)。 - 若
frac不为0,则表示非常接近0的数。
- 若
- 分布: 非规格化数之间是等间距的,确保了从最小正数到0的平滑过渡。
第 14 页:特殊值 (Special Values)
- 标题: 特殊值
- 条件:
exp全为1。 - 两种情况:
- 无穷大 (
):frac全为0。- 表示溢出运算结果。
- 例如:
, 。
- 非数 (NaN):
frac不全为0。- 表示未定义的运算结果。
- 例如:
, , 。
- 无穷大 (
第 15 页:规格化与非规格化值的分布 (Normalized vs. Denormalized Values)
- 标题: 规格化与非规格化值
- 图示解释:
- 展示了浮点数在数轴上的分布。
- 密度: 越接近0,数值分布越密集;数值越大,分布越稀疏。
- Gap: 如果没有非规格化数,0 和最小规格化数 (
) 之间会有一个巨大的空隙。非规格化数填补了这个空隙,使得最小非规格化数与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。
- 1位符号位
- 目的: 用更小的例子说明IEEE格式的原理(规格化、非规格化、0、NaN、无穷)。
第 19 页:动态范围 (Dynamic Range)
- 标题: 动态范围 (仅正数)
- 表格: 列出了上述8位浮点格式的部分编码及其对应的值。
- 非规格化区:
exp=0000, , 。值从 0 到 。 - 规格化区:
exp=0001~1110, , 。 - 特殊值:
exp=1111,frac=000 为 。
- 非规格化区:
- 关键点: 展示了从非规格化到规格化的平滑过渡(
到 )。
第 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。单精度约 。 - 最大非规格化数:
exp=0,frac=全1。 - 最小正规格化数:
exp=1,frac=0。单精度约 。 - 1.0:
exp=127,frac=0。 - 最大规格化数:
exp=254,frac=全1。单精度约 。
- Zero:
第 23 页:编码的特殊性质 (Special Properties of Encoding)
- 标题: 编码的特殊性质
- 要点:
- 浮点0与整数0: 编码相同(全0)。
- 比较: 几乎可以使用无符号整数比较逻辑(先比符号位,再比剩余位),但需注意 -0 = +0。
- NaN: 比较时会有问题(通常定义为大于任何值,或比较结果为假)。
- 顺序: 非规格化 < 规格化 < 无穷。
第 24 页:浮点运算基本思想 (Floating Point Operations: Basic Idea)
- 标题: 浮点运算基本思想
- 公式:
- 步骤:
- 计算精确结果。
- 调整以适应目标精度(可能溢出,可能需要舍入)。
第 25 页:舍入 (Rounding)
- 标题: 舍入
- 四种舍入模式 (以美元为例):
- 向零舍入 (Towards zero): 直接截断小数。
- 向下舍入 (Round down /
): 向负无穷方向。 - 向上舍入 (Round up /
): 向正无穷方向。 - 向偶数舍入 (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位小数)。
(小于中间值,向下)。 (大于中间值,向上)。 (中间值,11是奇数,进位变100)。 (中间值,10是偶数,舍去)。
第 28 页:浮点加法 (Floating Point Addition)
- 标题: 浮点加法
- 步骤:
- 对阶: 将小阶码的尾数右移,使两数阶码相同。
- 尾数相加: 执行有符号加法。
- 规格化:
- 若结果
,右移尾数,阶码+1。 - 若结果
,左移尾数,阶码-k。
- 若结果
- 舍入: 根据舍入模式调整尾数。
- 检查溢出: 阶码是否超出范围。
第 29 页:浮点加法的数学性质 (Mathematical Properties of FP Add)
- 标题: 浮点加法的数学性质
- 与实数算术对比:
- 封闭性: 否 (可能产生
或 NaN)。 - 交换律: 是 (
)。 - 结合律: 否 (
)。- 例:
, 但 。
- 例:
- 单位元: 是 (0)。
- 逆元: 几乎 (除了
和 NaN)。 - 单调性: 几乎 (除了
和 NaN)。
- 封闭性: 否 (可能产生
第 30 页:浮点乘法 (Floating Point Multiplication)
- 标题: 浮点乘法
- 步骤:
- 符号:
。 - 尾数:
。 - 阶码:
。 - 规格化: 若
,右移尾数,阶码+1。 - 舍入。
- 检查溢出。
- 符号:
- 难点: 尾数乘法较复杂。
第 31 页:浮点乘法的数学性质 (Mathematical Properties of FP Mult)
- 标题: 浮点乘法的数学性质
- 与实数算术对比:
- 封闭性: 否 (可能产生
或 NaN)。 - 交换律: 是。
- 结合律: 否 (可能溢出)。
- 例:
, 但 。
- 例:
- 分配律: 否 (可能溢出)。
- 例:
, 但 。
- 例:
- 单位元: 是 (1)。
- 单调性: 几乎。
- 封闭性: 否 (可能产生
第 32 页:C语言中的浮点数 (Floating Point in C)
- 标题: C语言中的浮点数
- 类型:
float(单精度),double(双精度)。 - 转换:
double/float->int: 截断小数(向零舍入)。溢出或NaN时行为未定义(通常设为TMin)。int->double: 精确转换 (只要int位数 )。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 具有清晰的数学定义 (
)。 - 运算可视为“完美精度计算后舍入”。
- 不同于实数算术: 不满足结合律、分配律。
- 影响: 给编译器和数值编程带来挑战。
- 灾难案例: 提及了因数值错误导致的著名事故。
- IEEE 754 具有清晰的数学定义 (
第 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)。
- 格雷码特点: 相邻编码只有一位不同,减少传输错误。
- 加权码: 如 8421码 (最常用),4位二进制表示1位十进制。
第 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)
- 标题: 逻辑值表示
- 概念:
- 通常将一个字视为整体。
- 有时需将
位数据视为 个独立的逻辑值 (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)
- 标题: 汉字表示
- 三种编码:
- 输入码: 拼音、五笔等。
- 机内码: 计算机内部存储处理 (通常2字节)。
- 国标码 + 8080H (最高位设为1,区别于ASCII)。
- 字形码: 用于显示。
- 流程: 输入码 -> 机内码 -> 字形码。
第 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)。
- 注意
long和pointer在32位和64位下的区别。
- 注意
第 51 页:主存容量单位 (Unit of Main Memory Capacity)
- 标题: 主存容量单位
- 二进制前缀 (IEC):
- KiB (
), MiB ( ), GiB ( )...
- KiB (
- 注意: 硬盘厂商常用十进制前缀 (KB=
),导致标称容量与实际可用容量有差异。
第 52 页:频率与线宽单位 (Unit of Frequency and Line Width)
- 标题: 频率与线宽单位
- 十进制前缀:
- kb/s (
), Mb/s ( ), Gb/s ( )...
- kb/s (
- 说明: 通信领域常用十进制。
第 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)
- 标题: 总结
- 回顾全书:
- 计算机系统介绍
- 二进制表示
- 算术运算
- 数值数据表示
- 非数值数据表示
- 数据宽度与存储
- 结语: 理解这些底层表示对于编写正确、高效的程序至关重要。