# 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:在编写如下代码时,遇到了问题:
    1065408-20170929150300450-239847624.png
    1065408-20170929150339934-374226710.png出现错误提示。

  • 问题1解决方案:经过仔细检查后发现时gcc命令输入错误,改正后:
    1065408-20170929150445512-1049524474.png

  • 问题2:再输入课本p54页代码后出现错误:
  • 1065408-20170929151032778-1916827548.png

  • 问题2解决方案:经过仔细检查代码发现时少了括号导致出错:
    1065408-20170929151340403-940526154.png

运行成功:
1065408-20170929151355622-942646743.png

  • 问题3:课本代码p38页输入后:
    1065408-20170929153217981-1010498012.png

进行测试运行:

1065408-20170929153311872-1151627536.png

查看课本后发现符合课本中描述的,若数组个数为单数时,会出现中间的数为0的情况。

  • 解决:
    在奇数个数时,因为first和last都指向中间的数字,每个元素就是他自身的加法元素(a^a=0)所以导致情况的出现,若修改:

1065408-20170929153701325-652687670.png

将原本的<=改为<,则避免了此情况。

1065408-20170929153752106-737287952.png

代码托管

1065408-20170929155231840-807367680.png

上周考试错题总结

  • 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页代码
    1065408-20170929145204325-470482970.png

在我自己加了主函数后,可以实现函数

show_int ,show_float,show_pointer

展示了如何使用程序

show_bytes

来分别输出类型

int,float

void*

的字节表示。

  • 运行结果:
    1065408-20170929145302794-215710773.png

  • 课本p52页代码:

1065408-20170929145807965-1314966841.png
当printf输出数值时使用%d,%u,%x输出一个数字,printf没有使用任何类型信息,所以可以使用%u来输出int的数值。
1065408-20170929150115090-604108440.png

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第四周12/121/120/20
第五周271/2831/215/15

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:15小时

  • 实际学习时间:17小时

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

参考资料

转载于:https://www.cnblogs.com/lsqsjsj/p/7611470.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值