zoukankan      html  css  js  c++  java
  • 20145227 《信息安全系统设计基础》第三周学习总结

    20145227 《信息安全系统设计基础》第三周学习总结

    教材学习内容总结

    p20: 三种数字:

    • 无符号数:基于传统二进制表示法,表示大于或者等于零的数字。
    • 补码:表示有符号整数的最常见方式
    • 浮点数:表示实数的科学计数法的以二为基数的版本。

    p22: 进制转换:注意拿二进制作中间结果。

    p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码。

    p26: 字节顺序是网络编程的基础。

    • 小端法:高对高,低对低。
    • 大端法:高对低,低对高。

    p28: 强制类型转换。自己添加了一个主函数,添加的代码如下:

    void test_show_bytes(int val)
    {
        int ival = val;
        float fval = (float)ival;
        int *pval = &ival;
        show_int(ival);
        show_float(fval);
        show_pointer(pval);
    }
    void main()
    {
        int val;
        printf("please enter an int:
    ");
        scanf("%d",&val);
        test_show_bytes(val);
    }
    

    编译及运行结果如下:

    p32: 能区分逻辑运算(结果是1或0)和位运算(结果是位向量)

    • 所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。

    p33: 掩码是位运算的重要应用,对特定位可以置一,可以清零。

    p38: 要用C99中的“long long”类型,编译时要用 gcc -std=c99

    p39: 补码的利用寄存器的长度是固定的特性简化数学运算。

    • 正数的补码=原码
    • 负数的补码=原码各位取反再加1

    p44: 有符号数和无符号数的转换

    • 强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。即:这些位上的值不变,但是由于最高有效位的权重发生变化,从而导致结果发生改变。
    • 处理同样字长的有、无符号数之间相互转换的规则:数值可能会变,但是位模式不变。(底层的位表示保持不变)
                     无————>有:U2Tw函数
                     有————>无:T2Uw函数
    

    p48: 怎么样让负数等于正数?

    • 在负数x后加上U,可以使其转换为(2^w+x)

    p49: 0扩展和符号扩展

    • 零扩展:多用于无符号数转换为一个更大的数据类型。只需在开头加上0即可。
    • 符号扩展:多用于补码数字转换。最高有效位是什么,就添加什么。

    p52: 深入思考一下代码和结果

    • length=0时会出现存储器错误,这是因为参数length是无符号的,计算0-1将进行无符号运算,等价于模数加法,结果得到UMax。因为任何数都是小于等于UMax的,所以<=比较总是为真,代码将访问数组a的非法元素。
    • 解决办法:1.将length声明为int类型 2.将for循环测试条件改为i>length

    p70: IEEE浮点标准,float/double类型
    1.IEEE浮点标准:

    用V = (-1)s * M * 2E的形式来表示一个数:
    符号:s决定这个数是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理。
    尾数:M是一个二进制小数,它的范围是1 ~ 2-ε,或者是0 ~ 1-ε。
    阶码:E的作用是对浮点数据加权,这个权重是2的E次幂(可能是负数)。
    

    2.编码规则:

    将浮点数的位表示划分为三个字段,分别对这些值进行编码:
    一个单独的符号位s直接编码符号s。
    k位的阶码字段exp = ek-1…e1e0编码阶码E。
    n位小数字段frac = fn-1…f1f0编码尾数M,但是编码出来的值也依赖于阶码字段的值是否等于0。
    

    3.两种常见的格式

    C语言中的单精度浮点格式float 和双精度浮点格式double。
    在float中,s、exp和frac字段分别为1位、k = 8 位和n = 23位,得到一个32位的表示;
    在double中,s、exp和frac字段分别为1位、k = 11 位和n = 52位,得到一个64位的表示。
    

    p78:整数与浮点数转换规则?

    • 整数->浮点数:整数转换成二进制表示,然后小数点左移若干位得到规格化表示;取出小数部分的数值,在后面补0使其达到23位; 用frac加上偏置量得到的结果用二进制表示,放在取出的部分前面,再加上一个符号位即可。

    学习中的问题和解决过程

    问题一:p28页代码一开始编译的时候出现问题,显示对main未定义的引用
    解决:自己添加了一个主函数解决了问题。

    问题二:不是很能理解某些公式,虽然老师说公式可以不看,做习题就好,但是不看公式的话后面练习做起来也很麻烦。但是看了公式效果却不怎么样。

    本周代码托管链接

    https://git.oschina.net/20145227/IS-Design-20145227

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

    • 听从了老师的建议后,本周注意了代码托管的注释要解释代码的作用,并且完成一个代码之后就git commit了一下。
    • 本周的需要掌握大量的书本内容,不向前面几周做实验一样直观能懂,需要仔细阅读书本,查找相关内容,还要练习习题才能搞清楚。目前还在练习课后习题。关于这章的内容,很多东西都是看起来很熟悉,我们都曾经学习过或者接触过,但是其实做起来并不容易,其中的原理我都是不太清楚的,就算学过的东西也会发现层次和深度都与原先不同。比如IEEE浮点,之前在计算机导论中学习的时候略微知道了一些皮毛,现在应用到实践中会感到比较困难。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0 2/2 20/20
    第二周 100/100 1/3 20/40
    第三周 200/300 1/4 22/62

    参考资料

  • 相关阅读:
    [kuangbin带你飞]专题1-23
    ES code study
    ES特点
    CENTOS7命令
    ES单机版安装
    ES安装手册
    数据库三大范式(1NF,2NF,3NF)及ER图
    win10下Spark的环境搭建
    MySQL安装详细图解整理
    MySQL中format()函数
  • 原文地址:https://www.cnblogs.com/m3182218/p/5924258.html
Copyright © 2011-2022 走看看