• 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小时

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

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

    参考资料

  • 相关阅读:
    隔离级别
    分析Hello2代码
    正则表达式
    Filter and servlet
    部署描述符
    Annotation
    LDAP and Implementation
    Restful levels and Hateoas
    servlet injection analysis
    隔离级别
  • 原文地址:https://www.cnblogs.com/hxl681207/p/7988768.html
Copyright © 2020-2023  润新知