2017-2018-1 20155320 《信息安全系统设计基础》第3周学习总结
参考老师提供的教材内容导读
教材学习内容总结
-
大多数计算机使用8进制块或者字节,作为最小的可寻址的内存单位,所有可能的地址集合就称为虚拟地址空间。
-
描述位模式一般用十六进制表示法。
-
gcc -m32 可以在64位机上执行,gcc -m64不能在32位机上执行。
-
可移植性即是程序对不同的数据类型的确切大小不敏感。
-
小端法:在内存中按照从最低有效字节到最高有效字节的顺序存储对象。
大端法:最高有效字节在前。
课本2-4代码执行,将输入val=12345,得到如下结果,可判定我的linux是小端法机器。
-
十进制数字x的ASCII码正好是0x3x,而终止字节的十六进制表示为0x00。使用ASCII码作为字符码与字节顺序和字的大小规则无关,因此文本数据比二进制数据具有更强的平台性而二进制代码是不兼容的。
-
位向量就是固定长度为w、由0和1组成的串,布尔运算可扩展到位运算。而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算
练习题2.8:
- 位级运算的一个常见用法就是实现掩码运算,对特定位可以置一,可以清零
课本2-11习题,果然出现了当输入cnt为奇数时,中间为0的结果:
通过单步调试,我发现是由于当cnt为奇数时,cnt-1为偶数,则会有last=first的时刻,此时异或结果为0。
若要解决此问题需要将循环中的first<=last改为first< last。
- 逻辑运算与位级运算的区别是,逻辑运算如果对第一个参数求值就能确定表达式的结果,那么逻辑运算就不会对第二个参数求值。
- 对于无符号数,右移必须是逻辑的。
- 补码的利用寄存器的长度是固定的特性简化数学运算。想想钟表,12-1 等价于 12 + 11,利用补码可以把数学运算统一成加法,只要一个加法器就可以实现所有的数学运算。以下为相关公式
-
零扩展:将一个无符号数转换为一个更大的数据类型,我 们只需要简单地在表示的开头添加0,这种运算称为零扩展 。
符号扩展:将一个补码数字转换为一个更大的数据类型可以执行符号扩展,规则是在表示中添加最高有效位的值
2.2.6补码数的符号扩展,运行结果如下:
- IEEE浮点表示
符号(sign) s决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号位解释作为特殊情况处理。
尾数(significand)M是一个二进制小数,它的范围是1~2-ε,或者是0~1-ε。
阶码(exponent):
E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)。将浮点数的位表示划分为三个字段,分别对这些值进行编码:
一个单独的符号位s直接编码符号s。
k位的阶码字段exp = ek-1…e1e0编码阶码E。
n位小数字段frac = fn-1…f1 f0编码尾数M,但是编码出来的值也依赖于阶码字段的值是否等于0。
家庭作业
- 我和结对对象完成的是*2.55:在不同的机器上,使用show_bytes.c编译并运行示例代码。确定这些机器使用的字节顺序
我在虚拟机上输入代码如下:
运行结果如下:
可以看出我的linux系统是小端法机器。
教材学习中的问题和解决过程
见代码调试的问题
代码调试中的问题和解决过程
- 问题1:在做课本代码2-4时,出现了如下问题,运行结果为
只有整型时输出正确,浮点时输出全0
- 问题1解决方案:后来我发现我的head.h没有在函数中出现,修改后又出现了如下问题
我尝试在head.h中定义byte_pointer,但是仍然无法解决,最终我将他们都放在了一个.c文件中终于出现了如下结果
代码托管
上周考试错题总结
见上一篇博客
结对及互评
本周结对学习情况
-
- 结对照片
-
结对学习内容
- 第二章内容
其他(感悟、思考等,可选)
本周学习内容感觉略重,主要是一方面第二章的内容比较多,还需要在虚拟机中边实践边学习,同时由于课上未完成还需要先补上学习第十章内容,感觉压力有点大。以后每周的学习任务都要按时完成了,第二章本该是国庆期间的学习内容,不能拖欠。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 200小时 | |
第一周 | 5/5 | 1/1 | 15/15 | |
第二周 | 1/2 | 23/38 | ||
第三周 | 206/327 | 1/3 | 28/66 | |
第四周 | 206/327 | 1/4 | 10/77 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:25小时
-
实际学习时间:28小时
-
改进情况:本周既需要学习课本内容,还需要完成课堂上未完成的内容
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)