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

    学号20145220 《信息安全系统设计基础》第3周学习总结

    教材学习内容总结

    三种数字:

    无符号数:基于传统二进制表示法,表示大于或者等于零的数字。

    补码:表示有符号整数的最常见方式。

    浮点数:表示实数的科学计数法的以二为基数的版本。

    为什么会产生漏洞?

    计算机运算的漏洞多由于计算机算数运算的微秒细节引发的。
    p22
    进制转化:

    x=2^n转化为十六进制
    将x写成x=2n的形式,令n=i+4j,x的十六进制表示为:开头为2i的值,后面补j个0。

    十进制转化为十六进制
    十进制数x反复除以16,得十六进制数

    十六进制转化为十进制
    十六进制数x反复乘以16,得十进制数

    p25
    gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
    p26
    字和字节顺序:

    字长:一个字长指明整数和指针数据的标称大小。字长决定最重要的系统参数就是虚拟地址空间的最大大小。对一个字长为w位的机器而言,虚拟地址的范围是0~2w-1,程序最多访问2w个字节。
    对于跨越多字节的程序对象需建立两个规则:

    小端法:高对高,低对低

    大端法:从视觉上,是这次阅读的顺序,与小端法相反。 使字节顺序变得可见的三种方式: 不同类型的机器之间通过网络传送二进制数据时,网络应用程序的代码编写必须遵守已建立的关于字节顺序的规则;使用反汇编器,处理整数数据的字节序列的存储字节顺序问题;当编写规避正常的类型系统的程序时。

    p28

    p32
    位向量的运算:按位运算

    位向量的应用:表示有限集合

    掩码表示的是设置为有效信号的集合。
    位级运算

    |:或
    &:与
    ~:取反
    ^:异或
    逻辑运算

    逻辑运算符:||(或)、&&(与)、!(非)
    逻辑运算认为所有非零的参数都表示TRUE,参数0表示FALSE。返回1或者0,分别表示结果为TRUE或FALSE。
    逻辑运算和位级运算的区别是:

    按位运算只有在特殊情况下,即参数被限制为0或者1时,才能与其对应的逻辑运算有相同的行为;
    若第一个参数求值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值。
    移位运算

    左移k位:丢弃最高位的k位,右端补k个0
    右移包括:逻辑右移、算数右移
    逻辑右移:左端补k个0(常用于无符号数)
    算数右移:左端补k个最高有效位的值(用于有符号数)
    p33
    掩码是位运算的重要应用,对特定位可以置一,可以清零。
    p38
    要用C99中的“long long”类型,编译时要用gcc -std=c99
    p39
    补码形式是最常见的有符号数的计算机表示方式:

    将字的最高有效位解释为负权 B2T(W)函数为:B2T(x) = -x(w-1)2(w-1)+∑xi2i(求和从i=0到i=w-2)

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

    处理同样字长的有符号数和无符号数之间相互转换的一般规则:
    数值可能会改变,但是位模式不变。

    c语言允许无符号数和有符号数之间的转换。转换的原则是底层的位表示不变。

    当从无符号数转换为有符号数是,效果是应用函数U2T,从有符号数转化为无符号数时,应用函数T2U,其中w表示数据类型的位数。

    负数和正数相等的情况:u=2147483648 =-2147483648
    (当输出分别为无符号形式和有符号形式时)

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

    在负数x后加上U,可以使其转换为(2^w+x)
    p49
    扩展数的位表示:

    零扩展:将无符号数转换为更大的数在表示的开头添加0

    符号扩展:将一个补码数字转换为一个更大的数据类型

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

    length=0时会出现存储器错误,这是因为参数length是无符号的,计算0-1将进行无符号运算,等价于模数加法,结果得到UMax。因为任何数都是小于等于UMax的,所以<=比较总是为真,代码将访问数组a的非法元素。

    解决办法:

    1.将length声明为int类型 
    2.将for循环测试条件改为i>length
    

    p67
    整数运算

    无符号加法

    无符号运算可以被视为一种模运算形式,无符号加法等同于计算和摸上2^w,可以通过简单的丢弃x+y的w+1位表示的最高位,来计算这个数值。

    一个算数运算的溢出,是指完整的整数结果不能放到数据类型的字长限制中去。
    补码加法

    两个数的w位补码之和与无符号之和有完全相同的位级表示。大多数计算机用相同的机器指令来执行无符号或者有符号加法。
    补码的非

    对于范围-2(w-1)≤x<-2(w-1)内的x,补码的非运算如下:

    x=-2^(w-1):补码的非为-2^(w-1)
    x>-2^(w-1):补码的非为-x 
    

    求位级补码非的方法:

    对每一位求补,再对结果加1
    建立在将位向量分为两部分的基础之上的
    无符号乘法

    两个数x、y相乘且x、y的位数为w,则结果的位数为2w。
    补码乘法

    同无符号乘法。 若为截断后的结果,则取结果的后w位作为计算结果。
    注意:无符号运算和补码运算在“+”、“-”、“*”在位级上有相同的结果。
    关于整数运算的最后思考

    计算机执行的“整数”运算实际上是一种模运算形式;
    表示数字的有限字长限制来了可能的值的取值范围,运算结果可能溢出;
    补码表示提供了一种即能表示负数也能表示正数的灵活方法,同时使用了与执行无符号算术相同的位级实现;
    c语言中的unsigned数据类型的使用也应当特别注意,比如,在书写整数常数和调用库函数的时候。
    p67
    浮点数:

    二进制小数
    将十进制小数转换为二进制小数 :

    首先,将十进制小数写成分数的形式,将分数的分子部分,写成二进制的形式;将分数的分母部分写成2^n的形式,将分子的二进制形式,从右往左数,数n位添加小数点。

    小数点左移:除以2 
    
    小数点右移:乘以2
    

    IEEE浮点数表示
    表示形式为:V = (-1)^s * M * 2^E

    符号:s决定这个数是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理。

    尾数:M是一个二进制小数,它的范围是1 ~ 2-ε,或者是0 ~ 1-ε。

    阶码:E的作用是对浮点数据加权,这个权重是2的E次幂(可能是负数)。

    根据阶码的值,可分为一下三种情况:

    情况一:规格化的值 (当阶码字段不全为0或全为1时)
    E = e-Bias
    Bias = 2^(k-1)-1
    M = 1+f

    情况二:非规格化的值 (当阶码字段全为0时)
    E = 1-Bias
    Bias = 2^(k-1)-1
    M = f

    情况三:特殊值 (当阶码字段全为1时)
    当小数域全为0时, 当s=1时,为-∞;当s=0时,为+∞。
    当小数域不全为0时,为NaN。
    浮点数的舍入
    有四种情况分别是:

    向偶数舍入(默认)
    向零舍入
    向下舍入
    向上舍入
    

    浮点运算

    浮点加法:不满足结合性、满足单调性

    浮点乘法:不满足结合性、满足单调性,在加法上不满足分配性
    教材学习中的问题和解决过程
    课后练习题
    练习题2.4

    0x503c+0x8 = 0x5044
    0x503c-0x40 = 0x4ffc
    0x503c+64 = 0x50a1
    0x50ea-0x503c=0xae
    练习题2.6

    写出0x00359141、0x4a564504的二进制表示:

    0x00359141 = 0000 0000 0011 0101 1001 0001 0100 0001
    0x4a564504 = 0100 1010 0101 0110 0100 0101 0000 0100
    练习题2.8
    a = [01101001],b = [01010101]。计算:

    ~a = [10010110]
    ~b = [10101010]
    a&b = [01000001]
    a|b = [01111101]
    a^b = [00111100]

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第四周 300/1300 2/9 30/90

    参考资料

  • 相关阅读:
    Anti-Aliasing SSAA MSAA MLAA SRAA 简介
    开源二维码QR CODE编码/解码 识别 库
    Shadow Map阴影贴图技术之探
    3D场景的制作步骤
    python实现对excel数据进行修改/添加
    selenium3 + python 爬虫
    Mock实现模拟python的对象
    Moco模拟服务器实现请求&响应 (一)
    python之Beautiflusoup操作
    python使用ddt模块对用例执行操作
  • 原文地址:https://www.cnblogs.com/hxf5220/p/5928364.html
Copyright © 2011-2022 走看看