# 2017-2018-1 20155232 《信息安全系统设计基础》第三周学习总结
2017-2018-1 20155232 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
本周学习第二章:
主要内容就是信息的表示和处理,信息的存储,16进制表示法,寻址,c语言中的运算以及数据的表示。
-
最低有效字节在前--小端法
最高有效字节在前--大端法
-
强制类型转换:允许以数据类型引用一个对象,而这种数据类型与创建这个对象时定义的数据类型不同。
-
c语言中的运算:
1、布尔运算
2、位级运算
3、逻辑运算
4、移位运算
5、有符号数和无符号数间转换
6、整数运算
7、浮点运算
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:
在看过课本上内容有关计算溢出的解释,当结果太大时以至于不能表示,所以某些运算会发生溢出的情况。那么在学习c语言的时候,会说到越界,越界和溢出有什么区别?
- 问题1解决方案:
在上网查询相关资料后,搜索到:
溢出本义是算术溢出(arithmetic overflow),指算术计算结果无法在一定范围内表示,细分上溢(overflow)和下溢(underflow)。
越界即访问越界(access out of range),指对存储的访问不在预先指定的界限内。
逻辑上来说可能造成访问越界的计算结果也可以看成一种溢出,这是引申义。只不过两种情况经常一起出现,所以混用了。
栈溢出(stack overflow)是这里的一种典型情况。栈增长一端的界限一般可以直接用一个地址表示,要访问的地址超过这个阈值就是溢出,表示访问对应的存储越界。
例如:整型32位,如果超过最大值就是溢出;越界是访问了非法的内存。
在这个链接中有更详细生动的解释便于理解:
越界和溢出有什么区别
- 问题2:
为什么int型的取值范围为-32768--32767,正数比负数绝对值小一?
- 问题2解决方案:
以char类型举例,其一共有8个位,最高位是符号位;那么其它7个位表示的范围是0~127; 那么考虑符号位以后,正数的范围是 +0 ~ +127,负数的范围就是-0~-127。问题出在这里:补码表示时,+0的表示与-0的表示是一样的:0取反加1后,溢出的1被舍弃,还是0;而如下的映射:f[0,x7,x6,x5,x4,x3,x2,x1]->[1,x7,x6,x5,x4,x3,x2,x1]一定是一一映射,其中x(i)取值0或1,则易见定义域的元素的个数与值域的元素一定相等。因为二进制1000 0000实际上是-128,1111 1111实际上是-1,在形如1xxx xxxx的表示中,你找不出一个0来;而形如xxx xxxx一定可以表示128个数,因此,这种“逼宫”的结果,就是负数的表示范围一定比正数大。
代码调试中的问题和解决过程
-
问题1:在编写如下代码时,遇到了问题:
出现错误提示。 -
问题1解决方案:经过仔细检查后发现时gcc命令输入错误,改正后:
-
问题2:再输入课本p54页代码后出现错误:
-
问题2解决方案:经过仔细检查代码发现时少了括号导致出错:
运行成功:
- 问题3:课本代码p38页输入后:
进行测试运行:
查看课本后发现符合课本中描述的,若数组个数为单数时,会出现中间的数为0的情况。
- 解决:
在奇数个数时,因为first和last都指向中间的数字,每个元素就是他自身的加法元素(a^a=0)所以导致情况的出现,若修改:
将原本的<=改为<,则避免了此情况。
代码托管
上周考试错题总结
- Linux中,内核虚拟内存在虚拟地址空间的低端。
A .正确
B .错误
正确:B 课本p13
- 处理器的()操作可以从寄存器中复制一个字节的数据到主存中。
A .加载
B .存储
C .操作
D .跳转
正确:B 课本p7
- I/O设备可以通过()与I/O总线相连。
A .控制器
B .主存
C .处理器
D .适配器
正确:AD 课本p5
计算机中总线传送定长的数据,这个定长是(),是一个基本的系统参数。
A .字节
B . 字
C .双字
D .四字
正确:B 课本p5
- gcc 把源程序翻译成可执行文件的四个阶段是:预处理阶段,编译阶段,汇编阶段,链接阶段,其中汇编阶段用到的工具和相应的gcc命令是()
A .cpp: gcc -E hello.c -o hello.i
B .ccl: gcc -S hello.i -o hello.s
C .as: gcc -c hello.s -o hello.o
D .ld: gcc hello.o -o hello
正确:C
结对及互评
点评模板:
暂无
本周结对学习情况
- [20155215](http://www.cnblogs.com/xuanyan/p/7673751.html)
- 结对学习内容
- 共同学习课本第二章内容
- 分析课本中代码遇到的问题
思考
这周的学习内容主要是操作系统中的信息表示和处理,看上去十分复杂,但是这些内容却是我们学习这门课的基础,我觉得主要还是在于实践,光看懂了课本显然是不够的,还需要动手自己编写代码。课本上很多代码都是只有部分,需要自己编写主函数输出等等。在编写代码上还需要多加练习。
- 课本p31页代码
在我自己加了主函数后,可以实现函数
show_int ,show_float,show_pointer
展示了如何使用程序
show_bytes
来分别输出类型
int,float
和
void*
的字节表示。
-
运行结果:
-
课本p52页代码:
当printf输出数值时使用%d,%u,%x输出一个数字,printf没有使用任何类型信息,所以可以使用%u来输出int的数值。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第四周 | 12/12 | 1/1 | 20/20 | |
第五周 | 271/283 | 1/2 | 15/15 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:15小时
-
实际学习时间:17小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)