20145330 第3周《信息安全系统设计基础》
教材学习内容总结
- 本章主要介绍了计算机如何编码以及不同的编码方式,数据类型之间的转换以及溢出等特殊现象。这一章主要是数据处理方面的要点,是以后学习的基础,搞不懂这些以后的编程中很容易出错,所以需要多加练习加强理解。
信息的表示和处理
-
三中重要的数字表示
- 无符号[表示大于或等于零的数字]
- 补码[二进制补码][表示有符号整数]
- 浮点数[表示实数的科学计数法的以二为基数的版本]
-
进制转换
- 进制转换,注意拿二进制作中间结果就好转了
-
数据大小
- gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
-
寻址和字节顺序
- 最低有效字节在最前面的方式,小端法
- 最高有效字节在最前面的方式,大端法
-
P28代码执行一下,自己添加了一个主函数,编译及运行结果如下
- 具体在后面重点练习中
- 具体在后面重点练习中
-
所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。
-
掩码是位运算的重要应用,对特定位可以置一,可以清零。
- 掩码是一个位模式,表示从一个字中选出的位的集合。
- 用位向量给集合编码,通过指定掩码来有选择的屏蔽或者不屏蔽一些信号,比如某一位位置上为1时,表明信号i是有效的;0表示该信号被屏蔽。
-
整型数据类型
- 要用C99中的“long long”类型,编译是要用 gcc -std=c99。long long至少需要8个字节表示。
-
补码的利用寄存器的长度是固定的特性简化数学运算。想想钟表,12-1 等价于 12 + 11,利用补码可以把数学运算统一成加法,只要一个加法器就可以实现所有的数学运算。
-
注意C语言中有符号数和无符号数的转换规则,位向量不变。
-
怎么样让负数等于正数?
- 在负数后加上U
-
0扩展和符号扩展
- 零扩展:简单地在表示的开头添加0;
- 符号扩展:在表示中添加最高有效位的值的副本。
-
浮点数有科学计数法的基础就不难理解,IEEE标准754
-
浮点数运算的不精确性与舍入
-
IEEE浮点标准,float/double类型
- IEE浮点标准: 用V=(-1)^s X 2^E X M 来表示一个数
- 符号:s决定这个数是正还是负。0的符号位特殊情况处理。
- 阶码:E对浮点数加权,权重是2的E次幂(可能 为负数)
- 尾数:M是一个二进制小数,范围为12-ε或者01-ε(ε=1/2的n次幂)
- 编码规则:单独符号位s编码符号s,占1位 k位的阶码字段exp编码阶码E n位小数字段frac编码尾数M(同时需要依赖阶码字段的值是否为0)
- 单精度(float),k=8位,n=23位,一共32位;双精度(double),k=11位,n=52位,一共64位。
代码调试中的问题和解决过程
重点练习
-
p28,show_bytes,写个main函数测试一下
-
问题:
无法正常运行
-
解决方法:
有一些参数变量没有之前交代清楚,将代码完善。
运行成功:
-
p35 练习2.11, 可以用GDB单步跟踪一下,理解更深刻
-
代码如下:
-
遇到的问题:在敲写代码时敲错
-
解决方法:根据提示13,26找到相应错误并改正即可
-
运行成功
-
p44 代码放到一个main函数中
- p49 代码放到一个main函数中
- 进行代码编写
-
存储不当遇到些问题,找不到目录
-
解决,运行结果:
本周代码托管截图
思考与感悟
这一周的学习主要是操作系统中的信息表示和处理,乍一看上去十分复杂枯燥,但是这些知识却是我们学习编程的基础中的基础,一定要清楚概念和运算转换方式。我觉得主要在于实践,考察了编写代码的能力,有些代码不是靠单纯地组合就能运行成功的,需要自己编写主函数,把书中的子程序放进去,我在编程这方面能力并不是很强,需要以后多加巩固练习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/ 0 | 1/1 | 20/20 | |
第二周 | 200/200 | 2/4 | 18/38 | |
第三周 | 350 /400 | 3/7 | 22/60 |