20145223《信息安全系统设计基础》第3周学习总结
2016-10-02 20:03
375 查看
20145223 《信息安全系统设计基础》第3周学习总结
教材学习内容总结
书上内容:
p20: 三种数字:无符号数(表示大于或等于零的数)、有符号数(2进制补码)、浮点数——当计算结果太大超出了计算机的表示范围时,就会产生溢出(overflow)
p22: 进制转换,十六进制(0x或0X开头)、十进制、二进制之间的相互转换——注意拿二进制作中间结果就好转了
p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
p26: 字节顺序是网络编程的基础,小端法:“高对高、低对低”, 大端法与之相反。
p28: 代码执行:
p32: 能区分逻辑运算(结果是1或0)和位运算(结果是位向量),所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。
与——&& 或——|| 非——! 按位与——& 按位或——| 按位异或——^ 按位取反——~ 逻辑右移(算数右移)——>> +右移位 逻辑左移(算数左移)——<< +左移位
p33: 掩码是位运算的重要应用,对特定位可以置一,可以清零
p38: 要用C99中的“long long”类型,编译是要用 gcc -std=c99
p39: 补码的利用寄存器的长度是固定的特性简化数学运算。想想钟表,12-1 等价于 12 + 11,利用补码可以把数学运算统一成加法,只要一个加法器就可以实现所有的数学运算。
p44: 注意C语言中有符号数和无符号数的转换规则,位向量不变。想想第一章说的 信息就是“位+上下文”
p48: 怎么样让负数等于正数? 信息安全的逆向思维:
程序运行的结果为正数变负,负数变正,0保持不变:
p49: 0扩展和符号扩展
零扩展:将一个无符号数转换为一个更大的数据类型,在表示的开头添加“0” 符号扩展:将一个补码数字转换为一个更大的数据类型
p52: 深入思考一下代码和结果
·运行这个代码:·出现错误:
·出现这个错误的原因是代码有错,应该将
b=sum_element(a[10],0)改为
b=sum_element(a,0),代码运行结果如下:
·结果应该为0但是程序运行出来的结果为1,这是因为参数length是无符号的,计算0-1进行的是无符号运算,结果得到Umax,比较使用的是无符号数进行比较,任何数小于Umax,因此比较结果为真。
·改正方法:将length改成int型或者for循环测试条件改为i<length:
p54: 如何让整数运算溢出?如何避免? p62例子看看
p67: 关于整数运算的最后思考:表示数字的有限字长限制了可能的值的取值范围,结果运算可能溢出。同时C 语言中的某些规定(比如unsigned数据类型),可能是产生某些难以察觉的缺陷的源头,比如书上p52的代码运行结果与预期不符,需要在以后的使用中多加注意。
p67: 浮点数有科学计数法的基础就不难理解,IEEE标准754
p68: 浮点数运算的不精确性与舍入
p70: IEEE浮点标准,float/double类型
IEE浮点标准:V=(-1)^s X 2^E X M来表示一个数
符号:s决定这个数是正数还是负数(0的符号位特殊处理) 尾数:M是一个二进制小数,范围为1~2-ε或者0~1-ε(ε=1/2的n次幂) 阶码:E对浮点数加权,这个权重是2的E次幂(可能为负)
p74: 整数与浮点数表示同一个数字的关系
p78: 整数与浮点数转换规则
int转换为float——数字不会溢出但可能会舍入 int或float转换成double——double有更大的范围和精度所以可保留精确的数值 double转为float——可能溢出也可能舍入 float或double转为int——值会向零舍入且可能溢出 整数不确定值——浮点数转换为整数但是不能为该浮点数找到一个合理的整数近似值
代码调试中的问题和解决过程
问题1:在运行书上p28页的代码出现:对“main”未定义的错误:
解决过程1:经过查看代码发现书上给出的代码中没有主函数“main”,自行加上主函数后则可以运行:
课后作业中的问题和解决过程
习题2.11
代码;
运行结果:
代码调整以后的结果:
习题2.23
代码:
运行结果:
结果分析:fun1进行的是逻辑移位,fun2进行的是算数移位
本周代码托管截图——代码托管链接
其他(感悟、思考等,可选)
这一周学习的内容在于数据在计算机内的表示,包括数据的类型和不同类型间的转换以及数据的运算等,虽然知识比较琐碎也比较多,但是可以和我们之前所学过的C语言课程所结合在一起进行学习。大体上看来都是一些比较基础性的东西,不是特别难懂,但是这些内容是以后进行编程实践的基础,同样需要重视和掌握。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 20篇 | 400小时 | |
第0周 | 0/0 | 1/1 | 5/5 | |
第1周 | 0/0 | 1/2 | 10/15 | |
第2周 | 300/300 | 1/3 | 15/30 | |
第3周 | 200/500 | 1/4 | 10/40 |
参考资料
《深入理解计算机系统V2》学习指导...
相关文章推荐
- 20145212 《信息安全系统设计基础》第3周学习总结
- 20145308 《信息安全系统设计基础》第3周学习总结
- 《信息安全系统设计基础》第3周学习总结
- 20145204《信息安全系统设计基础》第3周学习总结
- 20145320《信息安全系统设计基础》第3周学习总结
- 20145305 《信息安全系统设计基础》第3周学习总结
- 20145230 《信息安全系统设计基础》第3周学习总结
- 20145334赵文豪 《信息安全系统设计基础》第3周学习总结
- 20145314郑凯杰《信息安全系统设计基础》第3周学习总结
- 20145319 《信息安全系统设计基础》第3周学习总结
- 20145209 《信息安全系统设计基础》第3周学习总结
- 20145315 《信息安全系统设计基础》第3周学习总结
- 20145337 《信息安全系统设计基础》第3周学习总结
- 20145208《信息安全系统设计基础》第3周学习总结
- 20145223《信息安全系统设计基础》第2周学习总结
- 2015324 《信息安全系统设计基础》第3周学习总结
- 20145214 《信息安全系统设计基础》第3周学习总结
- 《信息安全系统设计基础》第3周学习总结
- 20145339《信息安全系统设计基础》第3周学习总结
- 20145202 《信息安全系统设计基础》第3周学习总结