2017-2018-1 20155208 《信息安全系统设计基础》第四周学习总结
教材学习内容总结
实验楼学习
利用假期的时间,我重新从头开始学习了娄老师的私课《深入理解计算机系统》 的实验楼:我重新学习了第一课和第二课,并且根据第三课的内容完成了第二周的作业。
关于Vim编辑器的学习,我上学期自己也进行了一个总结,有想看的同学也可以看一下那篇博客: Vim编辑器学习经验
教材第二章学习
- 一个字节由8位组成
- 在C语言中,以Ox和OX开头的数字常量被认为是十六进制的值。
- 其他进制表示法:二进制(B),十进制(D),八进制(O或者Q),十六进制(H)
进行书上练习2.4
注意进行十六进制加减法时的进位和退位时每个单位是以16的n次幂为基础进行的。
- 理论来说,对于一个字长为w位的机器来说,虚拟地址的范围是0~2w-1。程序最多访问2w个字节。
- C语言支持整数和浮点数的多种数据格式。
- 在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为使用地址中最小的地址。
- C语言中的typedef声明提供了一种给数据类型命名的方式。这能极大地改善代码的可读性,因为深度嵌套的类型声明很难读懂。它使用的是类型名而不是变量名,eg:
typedef int *int_pointer;
int_pointer ip;
- Linux 32、Windows和Sun的机器使用的是4字节地址,而Linux 64使用的是8字节地址。
进行书上练习2.6
熟悉十六进制与二进制之间的转换,并且了解什么叫做匹配位数。
- 表示字符串和代码: C语言中字符串被编码为一个null字符结尾的字符数组。每个字符串都由某个标准编码来表示,最常见的是ASCII字符码。
- 通过执行命令
man ascii
,你可以得到一张ASCII字符码的表。 - 布尔代数 常用运算符号:
与 :& 或 :| 非:~ 异或:^
进行书上练习2.8
- 位级运算:位向量按位进行逻辑运算,结果仍是位向量。位级运算的一个常见用法就是实现掩码运算,这里掩码是一个位模式,表示从一个字中选出的为的集合。
- C语言中的移位运算: C语言标准并没有明确定义应该使用那种两类型的右移。对于无符号数据,右移必须是逻辑的。而对于有符号数据,算术的或者逻辑的右移都可以。
进行书上练习2.10、2.11
在虚拟机上进行代码编写,并回答问题。
- c语言中的移位运算右移
右移分为逻辑右移和算术右移。算术左移和逻辑左移没有什么区别。逻辑右移: 在左端补k个0,多用于无符号数移位运算算术右移: 在左端补k个最高有效位的值,多用于有符号数移位运算。
- 补码运算
补码的用法: 加法必须确定结果太大或者太小时,应该采取什么措施,两个数的w位补码之和与无符号数之和有完全相同的位级表示。大部分计算机使用同样的机器指令来执行无符号或者有符号加法。
- 根据阶码的值,被编码的值可分为三种:
一:规格化的值(当阶码字段不全为0或全为1时),阶码E = e-Bias
(e为无符号整数);偏置值 Bias = 2^(k-1)-1
;尾数 M = 1+f
(小数字段frac的解释为描述小数值f,二进制小数点在小数字段最高有效位的左边)。
二:非规格化的值 (当阶码字段全为0时),E = 1-Bias;Bias = 2^(k-1)-1;M = f
。
三:特殊值 (当阶码字段全为1时),当小数域全为0时, 当s=1时,为-∞;当s=0时,为+∞;当小数域不全为0时,为NaN
- 向偶数舍入,也称为向最接近的值舍入,是默认的方式,方法是:将数字向上或者向下舍入,使得结果的最低有效数字是偶数。
教材学习中的问题和解决过程
问题: 教材中的练习2.34 对补码x[110]与y[110]的乘积结果[000100]的计算问题。
解决过程: 首先要了解补码乘法,然后进行了如下运算:
代码调试中的问题和解决过程
问题: 运行书上35页的两个代码,刚开始运行不了,然后自己加了一个主函数,还是有错误,错误信息如下:
解决过程: 在加了一个主函数后,定义了MAX常量,后成功运行:
代码托管截图
其他(感悟、思考等,可选)
在十一的假期中克服了自己的玩性,耐下心来学习了教材的第二章内容,认真的做了书上的练习题,也尝试编写了书上的几个代码,收获匪浅,终于懂得还是应该脚踏实地,劳逸结合,学习应立足于每一天,每天都不能松懈,只有这样,才能真正的称得上是一个有意义的假期。
学习进度条
代码行数(新增/积累) | 博客量(新增/积累 | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 5/5 | 1/1 | 8/8 |
第二周 | 1200/120 | 1/1 | 12/12 |
第四周 | 100/100 | 1/1 | 15/15 |