20135328-信息安全系统设计基础第三周学习总结(信息的处理和表示)
***第四周学习笔记(9.28-10.04):
学习计时:共小时
读书:
代码:
作业:
博客:6
一、学习目标
- 理解二进制在计算机中的重要地位
- 掌握布尔运算在C语言中的应用
- 理解有符号整数、无符号整数、浮点数的表示
- 理解补码的重要性
- 能避免C语言中溢出,数据类型转换中的陷阱和可能会导致的漏洞
二、学习资源
(提示:可选项,如有其他相关资源请在此说明):
- 教材:第二章《信息的表示和处理》,详细学习指导见这。
- 课程资料:https://www.shiyanlou.com/courses/413 实验三,课程邀请码:W7FQKW4Y
- 教材中代码运行、思考一下,读代码的学习方法见这。
三、学习方法
(提示:为提高学生的学习效果,请在此处为学生提出微课程学习的具体要求或建议)
- 进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。
- 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
- 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
- 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第三周学习总结”
四、学习任务
- 阅读教材,完成课后练习(书中有参考答案)
- 考核:练习题把数据变换一下
- 加分题:课后作业最多两人一组,互相不能重复,1星题目每人最多加一分,2星题目每人最多加二分,3星题目每人最多加三分,4星题目每人最多加四分。
五、后续学习预告(可选):
教材第三章《程序的机器级表示》
六、学习过程
1.进制
- p20: 三种数字:无符号数、有符号数(2进制补码)、浮点数,信息安全系同学从逆向角度考虑为什么会产生漏洞
计算机的运算方式和人的思维方式的差异?也就是设计者的问题? - p22: 进制转换,注意拿二进制作中间结果就好转了
0x十六进制-->二进制-->十进制 - p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
2.字和字节 - p26: 字节顺序是网络编程的基础,记住小端是“高对高、低对低”,大端与之相反就可以了。
小端法——在存储器中按照从最低有效字节到最高有效字节的顺序存储对象。
大端法——从最高有效字节到最低有效字节的顺序存储。 - p28: 代码执行一下
3.布尔运算
-
p32: 能区分逻辑运算(结果是1或0)和位运算(结果是位向量),所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门(?),就可以完成所有的逻辑运算。
不应该是与或非门吗? -
p33: 掩码是位运算的重要应用,对特定位可以置一,可以清零(被屏蔽)
通过指定一个位向量掩码,有选择的使能或不能屏蔽一些信号。 -
p38: 要用C99中的“long long”类型,编译是要用 gcc -std=c99
-
p39: 补码的利用寄存器的长度是固定的特性简化数学运算。想想钟表,12-1 等价于 12 + 11,利用补码可以把数学运算统一成加法,只要一个加法器就可以实现所有的数学运算。
正数的补码=原码
负数的补码=原码各位取反再加1 -
p44: 注意C语言中有符号数和无符号数的转换规则,位向量不变。想想第一章说的信息就是“位+上下文”
一个同样的字节序列,表示的东西因上下文的不同而不同 -
p48: 怎么样让负数等于正数? 信息安全的逆向思维
负数溢出? -
p49: 0扩展和符号扩展
对数据类型进行的拓展
公式较为复杂 -
p52: 深入思考一下代码和结果
-
p54: 如何让整数运算溢出?如何避免? p62例子看看
无符号加法等于计算和模上2 -
p67: 关于整数运算的最后思考
对整数运算还是有概念模糊,在位级运算上,我更倾向于 -
p67: 浮点数有科学计数法的基础就不难理解,IEEE标准754
-
p68: 浮点数运算的不精确性与舍入
-
p70: IEEE浮点标准,float/double类型
符号sign、尾数significand、阶码exponent -
p74: 整数与浮点数表示同一个数字的关系
74页的整数值转换成浮点形式例子很好....... -
p78: 整数与浮点数转换规则
七、遇到的问题及解决
- 只要一个与非门(?),就可以完成所有的逻辑运算。
不应该是与或非门吗?
关于此问题,在逻辑代数中有一个【完备集】的概念.所谓【完备集】就是:能够【表示或等价表示】所有【逻辑表达式】的【联结词】的集合.
任何一个【逻辑表达式】都可以看作是一个【逻辑函数】的解析式.那么,两个【逻辑表达式】等价,就可表示为两个【逻辑函数】相等.于是,问题转化为【是否可以用一组联结词,表示所有的逻辑函数】了.
逻辑函数,除了可以用逻辑表达式表示外;还可以用【真值表】表示.一个逻辑函数的表达式可以有千万种变化——所以,很难用逻辑表达式表示出所有的逻辑函数.但是,在真值表中,所有相等的逻辑函数的取值情况,却是唯一的.
不论一个逻辑函数有多复杂,它在真值表中,最终都是由一列0、1数列唯一确定的.而我们都知道:
任何一个逻辑函数,都可以根据其真值表直接写出它的【标准与或式】;
而标准与或式显然是仅由{与、或、非}表示的.这也就证明了{与、或、非}是一个【完备集】.
事实上,在{与、或、非}中,去掉【与】,或者去掉【或】之后,它仍然是一个完备集.即:只用{与、非}或者{或、非}也可以表示所有逻辑函数.证明思路很简单:
只要证明可以用{与、非}表示【或】,也可以用{或、非}表示【与】就行了.
八、其他
-家庭作业博客