zoukankan      html  css  js  c++  java
  • 2018-2019-1 20165226 《信息安全系统设计基础》第2周学习总结

    2018-2019-1 20165226 《信息安全系统设计基础》第2周学习总结

    目录


    教材学习内容总结

    **** ### 一、信息存储 1、字数据大小 > ①程序适用机器类型: >> `gcc -m32 prog.c`可在32位或者64位机器上正确运行 >> `gcc -m64 prog.c`只能在64位机器上运行 > > ②声明指针: >> 对于任何数据类型T,声明:`T*p`,表明p是一个指针变量,指向一个类型为T的对象。 >> 例如:`char *p`就将一个指针声明为指向一个char类型的对象。

    2、字节顺序

    ①小大端:

    小端法:最低有效字节在最前面的方式
    大端法:最高有效字节在最前面的方式

    ②表示整数数据的字节序列时字节顺序(遇小端则将字节按相反方向显示)

    4004d3: 01 05 43 0b 20 00 add %eax,0x200b43(%rip)

    3、位级运算

    确定位级表达式:将十六进制的参数扩展成二进制表示并执行二进制运算,然后再转换回十六进制。

    4、移位运算

    操作
    参数x [01100011][10010101]
    x<<4 [00110000][01010000]
    x>>4(逻辑右移) [00000110][00001001]
    x>>4(算数右移) [00000110][11111001]

    斜体数字表示的是最右端(左移)或最左端(右移)填充的值,但算术运算,拿右移来说,操作数最高位是1,则填充值为1

    二、整数表示

    1、无符号数的编码

    原理

    • 无符号数编码的定义

    • 无符号数编码的唯一性

    示例

    2、补码的编码

    原理

    • 补码编码的定义

    • 补码编码的唯一性

    运行程序及结果

    反码除了最高有效位的权是-(2^(w-1)-1)而不是-2^(w-1)

    3、无符号数与有符号数转换

    • 显式:
    int tx,ty;
    unsigned ux,uy;
    tx=(int) ux;
    uy-(unsigned) ty;
    
    • 隐式
    int tx,ty;
    unsigned ux,uy;
    tx= ux;
    uy= ty;
    
    • 举例(t2u为例)
    #include <stdio.h>
    int main()
    {
        char t = 0xFF;
        unsigned char u = (unsigned char)t;
        //%d把对应的整数按有符号十进制输出,%u把对应的整数按无符号十进制输出
        printf("t=%d,t2u=%u
    ",t,u);
        return 0;//c标准规定建议main函数返回值为int
    }
    


    4、截断

    • 截断无符号数:x'=xmod(2^k) 截断k位
    • 截断补码数值:x'=U2(T_k)(xmod2^k)

    三、整数运算

    1、无符号数加法

    xy为例,将整数和x+y截断为w位的结果作为一个无符号数输出

    正常:x+y
    溢出:x+y-MAX
    无符号数求反(结果如下)
    x, x=0
    2^w-x, x>0

    2、补码加法

    x+y-MAX, 正溢出
    x+y, 正常
    x+y+MAX, 负溢出

    3、补码的非

    TMin
    -x,x>TMin

    4、无符号乘法:

    x*y=(x·y)mod(2^w)

    5、补码乘法:

    x*y=U2T((x·y)mod(2^w))
    无符号和补码乘法的位级等价性:T2B(xy)=U2B((x'y')

    6、乘以常数

    乘以2的幂:x2^k的w+k位表示:后面增加k个0
    与2的幂相乘的无符号乘法&补码乘法:x<<k

    7、除以2的幂

    无符号除法:x>>k
    补码除法(向下舍入):算术右移k位
    补码除法(向上舍入):(x+(1<<k)-1)>>k

    四、浮点数

    1、IEEE浮点表示:V = (-1)^s * M * 2^E

    整数值和单精度浮点值在危机表示上有如下关系:相关的区域对应于整数的低位,刚好在等于1的最高有效位之前停止(这个位就是隐含的1),和浮点表示的小数部分的高位是相匹配的。
    舍入:找到最接近x的匹配值x'。

    向偶数舍入/向最接近的值舍入(默认)
    向零舍入(正数向下、负数向上)|x'|<=|x|
    向下舍入
    向上舍入

    2、浮点运算

    加法不具有结合性
    乘法不具有分配性
    C语言中的浮点数运算

    int->float 数字不会溢出,但是可能被舍入
    int/float->double 能保留精确的数值
    float/double->int 值将会向零舍入

    返回目录

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

    ****
    • 问题1: 怎么样让负数等于正数?
    • 问题1解决方案:可以通过将有符号数转换成无符号数。
    • 问题2:如何让整数运算溢出?如何避免?
    • 问题2解决方案:

    整数溢出:若2^(w+1)> x+y ≥ 2^w,则表示溢出

    • ps:若是无符号数,对于c = a + b,如果c < a || c < b 则已经溢出了
      避免:

    ①通过检测,若溢出将该合数减去2^w
    ②找一个较大值进行模运算

    返回目录

    代码学习中的问题和解决过程

    ****
    • 问题1:

    gcc 编译出错

    • 问题1解决办法:

    通过提示,发现将-o误写成了-0,更改后成功运行。

    • 问题2:

    报错: too many arguments for format

    • 问题2解决方案:

    开始以为是要打印的内容太多了,即引号内部的打印顺序有问题,调整后再编译还是出现了warning,就直接运行看看结果,发现是打印格式出错,如下图:

    误将%d写成了&d,更改后运行成功

    返回目录

    代码托管与统计

    **** [代码托管](https://gitee.com/Sean-Lxs/5226lxs.git) ![](https://img2018.cnblogs.com/blog/1047870/201809/1047870-20180930094709421-1949249370.png)

    返回目录

    教材2.96

    **** ### 题目如下: ![](https://img2018.cnblogs.com/blog/1047870/201809/1047870-20180930095518777-1434296501.jpg)

    知识点分析

    1、浮点数通常表示

    其中,M(Mantissa)被称为浮点数的尾数 ,R(Radix)被称为阶码的基数 ,E(Exponent)被称为阶的*** 阶码 ***。

    2、浮点数规格化表示

    尾数用原码;阶码用“移码”;基为2)

    下面举一个32位单精度浮点数-3.75表示的例子帮助理解:

    运行结果

    代码(https://gitee.com/Sean-Lxs/5226lxs.git)

    返回目录

    上周错题总结

    **** 1、(多选题) > 用gcc hello.c -o hello 编译hello.c,hello中不存在()节 > A ..debug B ..text C ..line D ..rodata ![](https://img2018.cnblogs.com/blog/1047870/201809/1047870-20180930102329721-1459235261.png) > > 正确答案: A C 你的答案: A > 解析:gcc -g 才会出现.debug .line

    2、( 单选题 | 1 分)

    dll,so文件的链接是运行在()
    A .编译时 B .加载时 C .运行时 D .链接时

    正确答案: C 你的答案: A
    解析:动态链接库在运行时加载

    返回目录

    学习进度条

    ****
    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 87/87 2/2 20/20
    第二周 71/158 1/3 12/32

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

    • 计划学习时间:10小时

    • 实际学习时间:12小时

    • 改进情况:

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

    返回目录

    参考资料

    **** - [《深入理解计算机系统V3》学习指导]([http://www.cnblogs.com/rocedu/p/5826467.html]) - [浮点数](https://blog.csdn.net/github_36186488/article/details/72639364) - [浮点数表示](https://blog.csdn.net/shuzfan/article/details/53814424) - [浮点异常值:NAN,QNAN,SNAN](http://www.cnblogs.com/konlil/archive/2011/07/06/2099646.html)

    返回目录

  • 相关阅读:
    JS 改变鼠标样式
    jquery 实践操作:iframe 相关操作
    jquery 实践操作:div 动态嵌套(追加) div
    jquery 实践操作:div 动态嵌套页面
    jquery 实践操作:attr()方法
    jquery 实践操作:load()方法
    nodeJS(2)深了解: nodeJS 项目架构详解(app.js + Express + Http)
    photoshop 安装
    Github 使用记录
    PhpStorm 10.0.1安装(win7-64位)
  • 原文地址:https://www.cnblogs.com/musea/p/9709334.html
Copyright © 2011-2022 走看看