• 信息安全系统设计基础第四周学习总结


    一、知识点总结

    1.信息存储

    练习题2.4

    0x503c+0x8=0x5044

    0x503c-0x40=0x4ffc

    0x503c+64=0x503c+0x40=0x507c

    0x50ea-0x503c=0xae

    1)字长:指明整数和指针数据的标称大小。一个字长为w的机器的虚拟地址范围为0~2^(w-1),程序最多访问2^w个字节

    int char 4字节,单精度float 字节,双精度double 8字节

    2)小端法:最低有效字节在最前面的顺序存储

       大端法:最高有效字节在最前面的顺序存储

    练习题2.6

    0x00359141=00000000001101011001000101000001

    0x4a564504=  01001010010101100100010100000100

    21个匹配位的序列

    除了最高有效位1,整数的所有位都嵌在浮点数中。浮点数有一些非零的高位不与整数中的高位相配。

    3)C语言中字符串被编码为一个以null(值为0)字符结尾的字符数组。在使用ASCII码作为字符码的任何系统上都会得到相同的结果,与字节顺序和字大小规则无关

    练习题2.7

    打印61 62 63 64 65 66strlen不计算终止的空字符,所以只打印到字符f

    练习题2.8

    a=01101001  b=01010101  ~a=10010110  ~b=10101010

    a&b=01000001   a|b=01111101   a^b=00111100

    练习题2.11

    A.firstlast的值都为k,所以想交换正中间的元素和自己

    B.Inplace_swap的参数xy都指向同一位置,*x^*y=0,然后将0作为数组正中元素,,且后面都把该元素设为0

    C.将reverse_array第四行测试替换为first<last,因为没必要交换正中间的元素和自己

    4)逻辑运算符  | |  &&  !,与位运算符相区别,逻辑运算认为所有非零的参数都表示true,参数0表示false。如果对第一个参数求值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值

    练习题2.13

    int result = bis(x,y); 

    int result = bis(bic(x,y),bic(y,x));

    bs运算等价于orbic(x,m)等价于x&~m

    x^y = (x&~y) | (~x&y)

    练习题2.14

    x&y=0x20   x|y=0x7f   ~x|~y=0xdf   x&!y=0x00

    x&&y=0x01   x||y=0x01   !x||!y=0x00   x&&~y=0x01

    练习题2.18

    A 440

    B 20

    C -424

    D -396

    E 69

    F -313

    G 16

    H 12

    I -276

    J 32

    练习题2.19

    X(十六进制)

    X

    T2U4(x)

    0x8

    -8

    8

    0xD

    -3

    13

    0xE

    -2

    14

    0xF

    -1

    15

    0x0

    0

    0

    0x5

    5

    5

    练习题2.21

    表达式

    类型

    求值

    -2147483647-1==2147483648U

    无符号数

    1

    -2147483647-1<2147483647

    有符号数

    1

    -2147483647-1U<2147483647

    无符号数

    0

    -2147483647-1<-2147483647

    有符号数

    1

    -2147483647-1U<-2147483647

    无符号数

    1

    练习题2.23

    w

    Fun1(w)

    Fun2(w)

    0x00000076

    0x00000076

    0x00000076

    0x87654321

    0x00000021

    0x00000021

    0x000000C9

    0x000000C9

    0xFFFFFFC9

    0xEDCBA987

    0x00000087

    0xFFFFFF87

    练习题2.24

    十六进制

    无符号

    补码

    原始数

    截断后的数

    原始数

    截断后的数

    原始数

    截断后的数

    0

    0

    0

    0

    0

    0

    2

    2

    2

    2

    2

    2

    9

    1

    9

    1

    -7

    1

    B

    3

    11

    3

    -5

    3

    F

    7

    15

    7

    -1

    -1

    练习题2.25

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

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

    练习题2.27

    函数是对确定无符号加法是否溢出的规则的直接实现

    练习题2.29

    x

    y

    x+y

    x+t5y

    情况

    -12[10100]

    -15[10001]

    -27[100101]

    5[00101]

    1

    -8[11000]

    -8[11000]

    -16[110000]

    -16[110000]

    2

    -9[10111]

    8[01000]

    -1[111111]

    -1[11111]

    2

    2[00010]

    5[00101]

    7[000111]

    7[00111]

    3

    12[01100]

    4[00100]

    16[010000]

    -16[10000]

    4

    练习题2.33

    W=4,TMin4=-8,因此-8是它自己的逆元,其他数值是通过整数非来取非的

    x

    -t4x

    十六进制

    十进制

    十进制

    十六进制

    0

    0

    0

    0

    5

    5

    -5

    B

    8

    -8

    -8

    8

    D

    -3

    3

    3

    F

    -1

    1

    1

    对于无符号数的非,位的模式是相同的

    练习题2.34

    模式

    x

    y

    x*y

    截断了的x*y

    无符号数

    补码

    4[100]

    5[101]

    20[010100]

    4[100]

    -4[100]

    -3[101]

    12[001100]

    -4[100]

    无符号数

    补码

    2[010]

    7[111]

    14[001110]

    6[110]

    2[010]

    -1[111]

    -2[111110]

    -2[110]

    无符号数

    补码

    6[110]

    6[110]

    36[100100]

    4[100]

    -2[110]

    -2[110]

    4[000100]

    -4[100]

    5)x>>kx算数右移k个位置,x>>>k会对x做逻辑右移

    逻辑右移是在左端补k0,算数右移是在左端补k个最高有效位的值

    6)无符号运算可视为一种模运算,无符号加法等价于计算和模上2^w,可以通过简单的丢弃x+yw+1位表示的最高位来计算这个数值

    练习题2.39

    表达式变成了-(x<<m)。设字长为wn=w-1。形式B要计算(x<<w)-(x<<m),但是将x向左移动w位会得出0

    练习题2.40

    K

    移位

    加法/减法

    表达式

    6

    2

    1

    (x<<2)+(x<<1)

    31

    1

    1

    (x<<5)-x

    -6

    2

    1

    (x<<1)-(x<<3)

    55

    2

    2

    (x<<6)-(x<<3)-x

    练习题2.42

    int div16(int x){

       int bias = (x>>31) & 0xF;

       return (x+bias)>>4;

    }

    表达式x>>产生一个字,如果x是负数,这个字为全1,否则为全0。通过掩码屏蔽适当的位则得到期望的偏置值。

    练习题2.43

    M=31,是用(x<<5)-x来计算x*M

    N=8,当y是负数时,加上偏移量7并右移3

    6)同样字长的有符号数和无符号数转换:数值可能改变,位模式不变。生成一个数的无符号表示和x的补码表示相同

    练习题2.44

    A .(x>0) | | ((x-1)<0)

    假。设x等于-2 147 483 648(TMin32),那么有x-1等于2 147 483 647(TMax32)

    B .(x&7) !=7 | | (x<<29<0)

    真。如果(x&7) !=7这个表达式值为0,那么必须有位x2等于1。当左移29位时,这个位将变成符号位

    C .(x*x)>=0

    假。当x65 535(0xFFFF)时,x*x-131 071(0xFFFE0001)

    D .x<0 | | -x<=0

    真。如果x是非负数,则-x是非正的

    E .x>0 | | -x>0

    假。设x等于-2 147 483 648(TMin32),则x-x都是负数

    F .x+y==uy+ux

    真。补码和无符号加法有相同的位级行为,而且是可交换的

    G .x*~y+uy*ux==-x

    真。~y等于-y-1uy*ux等于x*y,因此等式左边等价于x*-y-x+x*y

    练习题2.45

    小数值

    二进制表示

    十进制表示

    1/8

    0.001

    0.125

    3/4

    0.11

    0.75

    25/16

    1.1001

    1.5625

    43/16

    10.1011

    2.6875

    9/8

    1.001

    1.125

    47/8

    101.111

    5.875

    51/16

    11.0011

    3.1875

    将一个数表示为形如x/2^k的小数,使用x的二进制表示,并把二进制小数点插入右边算起的第k个位置

    练习题2.47

    e

    E

    2^E

    f

    M

    2^E*M

    V

    十进制

    00000

    0

    0

    1

    0/4

    0/4

    0/4

    0

    0.0

    00001

    0

    0

    1

    1/4

    1/4

    1/4

    1/4

    0.25

    00010

    0

    0

    1

    2/4

    2/4

    2/4

    1/2

    0.5

    00011

    0

    0

    1

    3/4

    3/4

    3/4

    3/4

    0.75

    00100

    1

    0

    1

    0/4

    4/4

    4/4

    1

    1.0

    00101

    1

    0

    1

    1/4

    5/4

    5/4

    5/4

    1.25

    00110

    1

    0

    1

    2/4

    6/4

    6/4

    3/2

    1.5

    00111

    1

    0

    1

    3/4

    7/4

    7/4

    7/4

    1.75

    01000

    2

    1

    2

    0/4

    4/4

    8/4

    2

    2.0

    01001

    2

    1

    2

    1/4

    5/4

    10/4

    5/2

    2.5

    01010

    2

    1

    2

    2/4

    6/4

    12/4

    3

    3.0

    01011

    2

    1

    2

    3/4

    7/4

    14/4

    7/2

    3.5

    01100

    -

    -

    -

    -

    -

    -

    无穷

    -

    01101

    -

    -

    -

    -

    -

    -

    NaN

    -

    01110

    -

    -

    -

    -

    -

    -

    NaN

    -

    01111

    -

    -

    -

    -

    -

    -

    NaN

    -

    7)零扩展:将无符号数转换为一个更大的数据类型,在表示的开头添加0

    8)符号扩展:将一个补码数字转换成一个更大的数据类型,在表示中添加最高有效位的值的副本

    练习题2.50

    原始值

    舍入后的值

    10.010

    2(1/4)

    10.0

    2

    10.011

    2(3/8)

    10.1

    2(1/2)

    10.110

    2(3/4)

    11.0

    3

    11.001

    3(1/8)

    11.0

    3

    练习题2.52

    格式A

    格式B

    位值

    位值

    011 0000

    1

    0111 000

    1

    101 1110

    15/2

    1001 111

    15/2

    010 1001

    25/32

    0110 100

    3/4

    向下舍入

    110 1111

    31/2

    1011 000

    16

    向上舍入

    000 0001

    1/64

    0001 000

    1/64

    Denorm->norm

    9)补码范围不对称:|TMin|=|TMax|+1

    10)最大的无符号数值比补码的最大值的两倍多1

    练习题2.54

    A .x==(int)(double)x

    真,因为double类型比int类型有更大的精度和范围

    B .x==(int)(float)x

    假,例如当xTMax

    C .d==(double)(float)d

    假,例如当dle40时,右边得到正无穷

    D .f==(float)(double)f

    真,因为double类型比float类型具有更大的精度和范围

    E .f == -(-f)

    真,因为浮点数取非就是对它的符号位取反

    F .1.0/2==1/2.0

    真,在执行除法之前,分子和分母都会被转换成浮点表示

    G .d*d>=0.0

    真,虽然它可能会溢出到正无穷

    H .(f+d)-f == d

    假,例如当f1.0e20d1..0时,表达式f+d会舍入到1.0e20,因此左边的表达式求值得到0.0,而右边是1.0

    二、遇到的问题

    对于无符号数的截断和补码数字的截断过程、原理不甚清楚

    三、学习感想总结

    本周对于《信息的表示和处理》这一章节的学习有些吃力,阅读书上的定义解释有些晦涩难懂,进制转换、求补码、逻辑右移之类的还有些基础知识,其余的很多内容如截断、有符号数和无符号数之间的转换都是知其然不知其所以然,做练习题时都要看着教材上的公式才能做出来,而且看不太懂许多公式的推理过程和原理,希望老师能在下节课上讲解一下具体应用。

  • 相关阅读:
    会话 终端
    linux 守护进程(daemon process)代码-详细注释
    linux进程及进程控制
    POSIX 消息队列 之 概述 链接方式
    管道和FIFO 一
    菜鸟从零学编程(七)——搭建一个完整的Java开发环境
    谈《赢》之慧眼识人
    kgdb接收一个数据包详解
    MapReduce调度与执行原理之作业初始化
    System Request 进入KDB模式过程详解
  • 原文地址:https://www.cnblogs.com/20135228guoyao/p/4849889.html
Copyright © 2020-2023  润新知