这是我开始学习CSAPP的笔记的第3篇,在接下来的内容,我会分享自己在学习CSAPP时的笔记,感受等等,学习资料来自b站
声明:所有内容基于自己的理解,如有错误感谢大家指出。
链接:【精校中英字幕】2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频_哔哩哔哩_bilibili
一.计算机中整数的运算
首先是对于无论是补码还是无符号数的运算,均只取所能表示的位数。、
一个数乘以2的幂,其实就是把这个数的二进制进行左移对应的位数。
证明:
二.浮点数
1.浮点数的表示
采用IEEE发布的标准。
IEEE规定采用如下形式表示一个浮点数
其中s,代表符号位,M为尾数,E为阶码。
浮点数有单精度与双精度2种。
对于规格化的数
首先规格化的数值exp不全为0也不全为1
其中 E = exp - biased,biased表示偏置值,计算方式是2^(n-1)-1,之所以要采用偏置值而不直接使用exp表示E是因为exp是一个无符号数,但我们希望阶数可以是正的也可以是负的,并且他们的取值范围相等,而减去偏置值可以达到这样一个效果。
M=1+frac
对于非格式化的值
为什么需要非格式化的值?对于格式化的值,我们会把他化成1.xxxxxxx的形式,可以看到,格式化的值仅能表示大于1的小数,因此需要引入非格式化的值去表示0~1之间的小数。
非格式化的值值exp全为0。
E = 1 -biased。为什么这里不用-biased呢,因为使用1-biased可以实现非格式化的值到格式化的值的平滑过渡,不得不佩服设计者考虑到如此。
而 M = frac。
特殊值
正无穷:符号位为0,exp全一,frac全0
负无穷:符号位为1,exp全一,frac全0
NaN(not a number):exp全一,frac不全为0
放上书上的一张图给大家理解
2. 舍入
我们都知道,有的小数是无限的,但计算机没办法表示无限的数,因此我们需要根据所能表示的最大位数进行舍入,计算机采用的是向偶数舍入。(四舍六入五向偶)
看几个例子。比如我们现在需要保留小数点后2位。
1.453 因为1.453不等于中间值1.455,所以向最近的舍入即1.45
1.457 因为1.453不等于中间值1.455,所以向最近的舍入即1.46
1.455 因为1.453等于中间值1.455,而最低有效位等于5为奇数,所以进位即1.46
1.445 因为1.445等于中间值1.445,而最低有效位等于4为偶数,所以不进位即1.44
二进制同理,下列数舍入到小数点后一位
10.010 因为10.010等于中间值10.010,而最低有效位0为偶数,所以不进位即10.0
10.011 因为10.011不等于中间值10.010,所以向最近的舍入即10.1
10.110 因为10.110等于中间值10.110,而最低有效位1为奇数数,所以进位即11.0
11.001 因为11.001不等于中间值11.010,所以向最近的舍入即11.0
3.浮点运算
浮点运算满足交换律但不满足结合结合律。
值得注意的是,浮点乘法满足单调律,但补码或无符号数均不满足。
浮点运算也会溢出,溢出为正无穷或负无穷。