20155212 2017-2018-1 《信息安全系统设计》第3周学习总结
教材学习内容总结
Chapter 2
- 三种最重要的数字表示
无符号
编码:基于传统的二进制表示法,表示大于或者等于零的数字。——表示无符号整数
补码
编码:表示有符号整数
的最常见的方式,有符号整数
就是有正负的数字。——表示有符号整数
浮点数
编码:是表示实数的科学计数法的以2为基数的版本。——表示浮点数
- 计算机的表示法是用有限数量的位来对一个数字编码。
- 整数运算和浮点数运算会有不同的数学属性是因为前者是精确的,后者是近似的,先精确再近似,还是先近似再精确会带来不同的结果。e.g.(3.14+1e20)-1e20=0, 3.14+(1e20-1e20)=3.14。
- 32位程序和64位程序的区别在于编译的不同,而与运行的机器的类型无关。
- 多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。每个地址存放四个字节。e.g.int32_t类型变量地址为0x100,地址表达式&x的值为0x100,为什么会被存储在内存的0x100、0x101、0x102和0x103四个位置。
- 小端法和大端法
- 字节顺序较重要的三种情况:
- 大端法机器与小段法机器之间传输数据
- 阅读表示整数数据的字节序列(反汇编)
- 编写规避正常的类型系统的程序时
- 不同的机器类型使用不同的且不兼容的指令和编码方式。
- 有符号数到无符号数的隐式强制类型转换导致了某些非直观地行为。
- 浮点运算只有有限的范围和精度,不遵守普遍的算术属性。
教材学习中的问题和解决过程
- 什么是编码?
- 编码是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码。
- 溢出会带来什么安全问题吗?
- 整数溢出是不能被立即察觉,因此没有办法去用一个应用程序来判断先前计算的结果是否实际上也是正确的.如果是用来计算缓冲区的大小或者计算数组索引排列的距离,这会变的危险。当然很多整数溢出并不是都是可利用的,因为并没有直接改写内存,但是有时,他们可导致其他类型的bugs,缓冲区溢出等.而且,整数溢出很难被发现,因此,就算是审核过的代码也会产生意外。
void **
和void *
指的是什么?void*
是不带类型的指针,而void**
是带类型的指针,就这个不同而对于不带类型的指针来说,不能进行算术运算,而带类型的指针就可以进行算术运算了。
- 为什么要用补码?
- 使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
代码托管
其他
- 这一章的可读性不强,很多计算和公式,但是讲解得深入浅出,结合图像和实例,很多第一眼看上去难懂的概念都能被阐述清楚。
学习进度条
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 96/96 | 1/1 | 15/15 | |
第二周 | 30/126 | 1/2 | 21/36 | |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
参考:软件工程软件的估计为什么这么难,软件工程 估计方法
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料