# 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小时

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2017-09-29 16:03  短爪爪爪  阅读(226)  评论(2编辑  收藏  举报