- GitHub计算机系统CSAPP课程资源
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.1-2.2)
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.2-3.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.5-3.7)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.8-3.10)
- 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)
- 计算机系统课程 笔记总结 CSAPP第五章 优化程序性能(5.1-5.14)
- 计算机系统课程 笔记总结 CSAPP第六章 存储器层次结构(6.2-6.6)
- 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.2-8.4)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.1-9.5)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.6-9.10)
目录
2.3 整数运算
|
|
|
|
| 算术运算: 基本规则
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| 2.3.1 无符号加法 |
|
|
| ||
|
|
|
|
|
| |
|
|
|
|
| ||
|
|
|
|
|
| |
|
|
|
| |||
|
|
|
|
|
|
2.3.2 补码加法
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
| ||||||
|
|
|
|
|
|
| |
|
| 判断补码是否超范围:
|
|
| |||
|
|
|
|
|
|
|
2.3.3 补码的非
注意:在w位最小值取非时,值不变
2.3.4 无符号乘法
w位和w位无符号数做乘法,2w位取低w位
即截断为w位,等价于该值模2^w
2.3.5 补码乘法
|
|
|
|
|
|
|
|
|
| ||
|
|
|
2.3.6 乘以常数
|
|
|
|
|
|
| 优化 |
|
|
|
2.3.7 除以2的幂
算术右移k位=除以2的k次方
2.3.8 关于整数运算的最后思考
- 一定要知道隐含的转换规则,否则不要用:
- 常见错误
- unsigned i;
- for (i = cnt-2; i >= 0; i--)
- a[i] += a[i+1];
- 不易察觉的问题
- #define DELTA sizeof(int) //sizeof()类型unsigned
- int i;
- for (i = CNT; i - DELTA >= 0; i -= DELTA)
- . . .
- 常见错误
2.4 浮点数
2.4.1 二进制小数
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
| 局限性
|
| |||
|
|
|
2.4.2 IEEE浮点表示
IEEE标准754
- 快速、易于实现
- 精度损失小
- 优雅、易理解
- 所有主流CPU都支持
- 之前有很多不同格式、不太关注精确性
|
|
|
|
|
|
| |
|
|
| |
|
|
|
- 条件: exp = 000…0
- 阶码(Exponent) 值: E = 1 – Bias =-126/-1022(instead of E = 0 – Bias)
- 尾数(Significand)编码隐含先导数值0: M = 0.xxx…x2
- xxx…x:是 frac字段的数码
- 情况1: exp = 000…0, frac = 000…0
- 表示值0
- 注意有不同的数值 +0 和 –0 (why?)
- 情况2:exp = 000…0, frac ≠ 000…0
- 最接近0.0的那些数
- 间隔均匀
- 逐渐下溢
- 非规则化数
- 条件:阶码全为1,exp = 111…1
- 当小数域全为0,frac=000…0
- 当s=0时
- 值:+∞
- 当s=1时
- 值:-∞
- 当s=0时
- 当小数域非0
- NaN(Not a Number)
- 特殊值
2.4.3 数字实例
规格化浮点数表示范围:
- 单精度:
- 约 +3.4 X 1038
- 双精度
- 约 +1.8 X 10308
2.4.4 舍入
- 基本思想
- 首先,计算精确结果
- 然后,变换到指定格式
- 可能溢出:阶码太大
- 小数部分可能需要舍入
默认:向偶数舍入
- 其他方法都有统计偏差,对正整数集合求和时,和将始终被低估或高估(负偏差、正偏差)
- 当恰好在两个可能的数值正中间时(中间值):
- 舍入后,最低有效位的数码为偶数,即最低有效位值为0
- 7.8950000 7.90 (中间值—向上舍入)
- 7.8850000 7.88 (中间值—向下舍入)
- 舍入后,最低有效位的数码为偶数,即最低有效位值为0
- 其他时候:
- 向最近的数值舍入
- 比中间值小向下舍入,比中间值大向上舍入
- 7.8949999 7.89 (比中间值小:向下舍入)
- 7.8950001 7.90 (比中间值大:向上舍入)
2.4.5 浮点运算
|
|
|
|
| 浮点数加法
|
| 浮点数乘法
|
|
|
|
2.4.6 C语言的浮点数
- 两种精度
- float 单精度
- double 双精度
- 类型转换
- int, float, double 间转换,将改变位模式
- double/float → int
- 截掉小数部分
- 类似向0舍入
- 当数值超范围或NaN时无定义:通常设置为 TMin
- int → double
- 精确转换,只要int的位宽 ≤ 53 bit,即可精确转换
- int → float
- 将根据舍入模式进行舍入
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.1-2.2)
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.2-3.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.5-3.7)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.8-3.10)
- 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)
- 计算机系统课程 笔记总结 CSAPP第五章 优化程序性能(5.1-5.14)
- 计算机系统课程 笔记总结 CSAPP第六章 存储器层次结构(6.2-6.6)
- 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.2-8.4)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.1-9.5)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.6-9.10)
- GitHub计算机系统CSAPP课程资源