2019-2020-1 20175209 《信息安全系统设计基础》第二周学习总结
2019-2020-1 20175209 《信息安全系统设计基础》第二周学习总结
教材知识点总结
- 无符号数、补码、浮点数是我们研究的最重要的三种数字表示。其实注意的是,补码编码是表示有符号整数最常见的方法,在计算机中负数都是用补码的形式来存储的;浮点数以二为基数。
- 由于表示的精度有限,浮点运算是不可结合的
- C语言允许在各种不同数据类型之间做强制类型转换。但要注意,将负数转换为无符号数可能会得到0,且强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。
- 零扩展和符号扩展:零扩展应用于无符号整数,符号扩展应用于有符号整数。
- 截断数字:与扩展相反,截断是用来减少一个数字的位数。截断时,抛弃高位。对于一个x位的数字,要截断为y位,就抛弃了高x-y位。也就是相当于xmod2的y次方。
- 区分位运算和逻辑运算的区别与运算方法。
- 逻辑右移:>>>,算数右移:>>
- 无符号数和补码的乘法一样,除法都是进行移位。无符号数的除法移位后补0,补码的除法移位后补1。
教材学习中的问题和解决办法
- 问题1:第48页的练习题,在看反汇编列表的时候,不理解16进制补码后的$,%rsp,%rax,%rid什么意思
- 解决:$表示偏移地址,rsp,rax,rid是指针寄存器
- 问题2:浮点数在计算机中存储方式是怎样的?
- 解决:
现代计算机中,浮点数一般采用IEEE制定的国际标准,形式如下:
符号位s | 阶码e | 尾数 | 总尾数 | |
---|---|---|---|---|
短实数(单精度数) | 1 | 8 | 23 | 32 |
长实数(双精度数) | 1 | 11 | 52 | 64 |
临时实数 | 1 | 15 | 64 | 80 |
- 问题3:教材第31页中出现了一个之前没有接触过的数据类型“size_t”,书中的解释是“它表示数据结构大小的首选数据类型”,但我还是不理解这里的“数据结构大小”是什么意思。
- 解决:根据对代码的分析,show_bytes函数用于打印每个字节,size_t 类型变量i为循环控制变量,最大值为某类型变量所占字节数,所以我推测size_t应该是个类似int类型的变量,那么它与整型的关系是什么呢?通过搜索资料,我发现“size_t的取值range是目标平台下最大可能的数组尺寸”所以,它能够“跨平台”。
不同平台的size_t会用不同的类型实现,使用size_t而非int或unsigned可以写出扩展行更好的代码。”
上周错题总结
用gcc hello.c -o hello 编译hello.c,hello中不存在()节
A..debug
B..text
C..line
D..rodata
正确答案: A C
13 .为了构造可执行文件,连接器的主要任务有()
A.生成静态库
B.符号解析
C.生成共库
D.重定位
正确答案: B D