20155336 2017-2018 1 《信息安全系统设计基础》第3周学习总结

20155336 2017-2018 1 《信息安全系统设计基础》第3周学习总结

本周学习目标

1:理解二进制在计算机中的重要地位

2:掌握布尔运算在C语言中的应用

3:理解有符号整数、无符号整数、浮点数的表示

4:理解补码的重要性

5:能避免C语言中溢出,数据类型转换中的陷阱和可能会导致的漏洞

6:进一步理解“信息=位+上下文”

《深入理解计算机系统》第2章 信息的表示和处理

信息的表示和处理有关知识点

  • 现代计算机存储和处理信息以二值信号表示,这些二进制数字称为位。

  • 计算机将信息按位编码,通常组织成字节序列。

  • 在相同长度无符号和有符号整数之间进行强制类型转换时,大多数C语言实现遵循的原理则是底层的位模式不变。

  • 在补码机器上,对于一个w位的值,这种行为是由函数T2UWU2TW来描述的。

  • 由于编码长度有限,与传统整数和实数相比,计算机运算具有完全不同的属性。当超出表示范围时,有限长度能够引起数值溢出。例如:当浮点数非常接近于0.0,从而转换成0时,也会下溢出。

  • 浮点表示通过数字编码为x*2^y的形式近似表示实数。

  • 注意因为浮点数只有有限的范围和精度,不会遵守普遍的算数属性。

  • 通过移位来进行乘法运算

    • 教材2.4:若x需要乘以一个数k,则将k分解为2的指数的加减法,幂级数代表移位数,随后用加减的正负号来连接。
  • 教材P28的代码,自己添加main来进行测试

  • 教材P35的代码

  • 教材P49的代码

教材学习中的问题和解决过程

  • 关于大端法和小端法

    最开始理解定义没什么问题,区分不同的地方在于有效字节的排列。最低有效字节在最前面成为小端法,那么最高有效字节在最前端称谓大端法。

    但是书上习题 Ox01234567的例子为什么高位字节的16进制是Ox01 低位时Ox67?

    看过课后习题关于Ox87654321的例子明白了,因为每个十六进制的数字,在地址排列中有两个通用规则。考虑一个w位的数,位表示为[Xw-1,Xw-2,...,X1,X0]其中Xw-1是最高位,X0是最低位.这样一来就可以明白高位字节是Ox01,低位字节是Ox67,这样问题就顺利解决了。

  • 关于表示字符串

    通过以前的学习也知道是由一张ASCII字符码表,但是对于使用使用ASCII作为字符码的任何系统上会得到相同结果,与字节顺序和字大小规则无关并不太理解。

    在虚拟机下使用man ascii得到一张ASCII表,并用书上的例子

      const  cahr *s ="abcdef"
      show_bytes( (byte_pointer)s,strlen(s));
    

    解决了这一问题。

  • 关于掩码

    掩码是位模式,表示从一个字中选出位的集合。根据计算x&OxFF生成一个由x的最低有效字节组成的值,而其他的字节就被置为0。书上的例子X=Ox89ABCDEFOxFF&运算,为什么是Ox000000EF,原来运算需要换算成二进制数才可以,十六进制不可以运算。

  • 关于有符号数和无符号数

    创建无符号常量,必须加上后缀字符“u”或者“U”。允许无符号数和有符号数之间的转换,转换的原则是底层位保持不变。在转换时候可以采用隐式,这样就解决了书上p48的练习遇到的问题。

    隐式类似于:

      int x,y;
      unsigned ux, uy;
      x=ux;
      y=uy;
    

    因为在代码段中省略了x=(int)ux ;所以在编写代码的时候容易出错,一定要区分清楚哪个是符号数哪个是无符号数。

代码托管

代码链接

其他(感悟、思考等,可选)

这周学到的知识,补码,反码等,包括溢出等知识点虽然以前在计算机导论和c语言基础的课程上都有所了解,但是将这些知识点放在一个全新的Linux系统下理解就有很多的不一样了,不论在理解方面还是运用的方面都是新的知识。

我们一定要把概念搞清楚,才会少犯这种低级的错误,还是得把基础搞牢。计算机和人不一样,我们要慢慢的去习惯这种计算机式的思维方式,有利于提高我们的编程能力。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 10 /10 1/1 10/10
第二周 60 /70 2/4 18/38
第三周 170/200 3/7 15/60

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:15小时

  • 实际学习时间:15小时

  • 改进情况:多提出问题,多解决问题。

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

原文地址:https://www.cnblogs.com/hxl681207/p/7988768.html