2017-2018-1 20155312 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
第三周课下主要学习了教材第二章的内容,包括浮点数与整数在处理数字有限性上的不同、计算机中数据存储的方式、各种进制之间的转换、字长与虚拟地址空间的关系、小端方式和大端方式决定的字节顺序在计算机处理数据时可能出现的问题、强制类型转换的应用
教材学习中的问题和解决过程
- 问题1:教材第31页中出现了一个之前没有接触过的数据类型“size_t”,书中的解释是“它表示数据结构大小的首选数据类型”,但我还是不理解这里的“数据结构大小”是什么意思。
- 问题1解决方案:根据对代码的分析,show_bytes函数用于打印每个字节,size_t 类型变量i为循环控制变量,最大值为某类型变量所占字节数,所以我推测size_t应该是个类似int类型的变量,那么它与整型的关系是什么呢?通过搜索资料,我发现“size_t的取值range是目标平台下最大可能的数组尺寸”所以,它能够“跨平台。
不同平台的size_t会用不同的类型实现,使用size_t而非int或unsigned可以写出扩展行更好的代码。”
代码调试中的问题和解决过程
- 问题1:输入“8”运行32页代码后为什么show_float函数打印的数值是00000041?浮点数在计算机中是怎样存储的?
- 问题1解决方案:通过输入“128”调用show_int函数时打印的“80000000”可以发现,我的电脑中数据是以小端法存储的,所以浮点数8.0的字节表示真值应该为“41000000”。通过查询资料,参考浮点数的编码我发现:
浮点数可以表示成N=M*RE,M—尾数(用原码或补码表示),R—阶的基数(也就是指数部分的底),R 一般取2、8或16,为约定的常数,大多数机器 R 取定为2;E—阶的阶码(一般用移码或补码表示)。
现代计算机中,浮点数一般采用IEEE制定的国际标准,形式如下:
符号位s | 阶码e | 尾数 | 总位数 | |
---|---|---|---|---|
短实数(单精度数) | 1 | 8 | 23 | 32 |
长实数(双精度数) | 1 | 11 | 52 | 64 |
临时实数 | 1 | 15 | 64 | 80 |
但是我还是看不懂它是怎么编码的,不了解浮点数在存储单元里的值为什么是41000000。
-
问题2:为什么31页代码中show_pointer函数的参数是void *类型,但是32页测试代码中就可以传入int *类型的实参呢?
-
问题2解决方案:通过查询资料,我发现“任何指针都可以赋值给void指针”,“void指针赋值给其他类型的指针时都要进行转换 ”。
-
问题3:为什么在调试第38页练习2.11的代码时,数组个数为奇数且元素为“1,2,3,4,5”,运行结果与预期相符为“5,4,0,2,1”,但调试时查看a[2]的值却是4?(图1)
-
问题3解决方案:通过“print a[0]”“print a[1]”……“print a[4]”等指令查看主函数运行结束后数组a[]内元素的值,发现依次为1,3,4,5,2,不理解为什么运行结果正确但调试时查看的数值与实际不符。(图2)
调试时进入inplace_swap()函数发现当传入a[1],a[3]即“2,4”时,inplace_swap中x和y的值分别为“5,4”,与实际不符(图3)
代码托管
(运行statistics.sh脚本时出现了问题,与实际情况不符)
上周考试错题总结
- 无法打开蓝墨云第二周测试个人结果解析
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- 20155333
- 结对照片
- 结对学习内容
- 第二章
其他(感悟、思考等,可选)
最近自学能力有所下降,不知道问题怎么解决。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 100/200 | 1/2 | 9/20 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:10小时
-
实际学习时间:9小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)