20135328-信息安全系统设计基础第三周学习总结(信息的处理和表示)

***第四周学习笔记(9.28-10.04):
学习计时:共小时
读书:
代码:
作业:
博客:6
一、学习目标

  1. 理解二进制在计算机中的重要地位
  2. 掌握布尔运算在C语言中的应用
  3. 理解有符号整数、无符号整数、浮点数的表示
  4. 理解补码的重要性
  5. 能避免C语言中溢出,数据类型转换中的陷阱和可能会导致的漏洞

二、学习资源
(提示:可选项,如有其他相关资源请在此说明):

  1. 教材:第二章《信息的表示和处理》,详细学习指导见这。
  2. 课程资料:https://www.shiyanlou.com/courses/413 实验三,课程邀请码:W7FQKW4Y
  3. 教材中代码运行、思考一下,读代码的学习方法见这。

三、学习方法
(提示:为提高学生的学习效果,请在此处为学生提出微课程学习的具体要求或建议)

  1. 进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。
  2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
  3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
  4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第三周学习总结”

四、学习任务

  1. 阅读教材,完成课后练习(书中有参考答案)
  2. 考核:练习题把数据变换一下
  3. 加分题:课后作业最多两人一组,互相不能重复,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数列唯一确定的.而我们都知道:
      任何一个逻辑函数,都可以根据其真值表直接写出它的【标准与或式】;
    而标准与或式显然是仅由{与、或、非}表示的.这也就证明了{与、或、非}是一个【完备集】.
      事实上,在{与、或、非}中,去掉【与】,或者去掉【或】之后,它仍然是一个完备集.即:只用{与、非}或者{或、非}也可以表示所有逻辑函数.证明思路很简单:
      只要证明可以用{与、非}表示【或】,也可以用{或、非}表示【与】就行了.

八、其他
-家庭作业博客

原文地址:https://www.cnblogs.com/cdcode/p/4854053.html