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\n",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)

返回目录

posted on 2018-09-30 10:14  musea  阅读(347)  评论(0编辑  收藏  举报