20145229吴姗珊《信息安全系统设计基础》第3周学习总结
教材学习内容总结
信息的表示和处理
1.信息储存
-虚拟存储器:计算机级程序将存储器视为一个非常大的字节数组
-十六进制表示法:若位的总数不是4的倍数,最左边的一组可以少于4位,前面用0补足
-虚拟地址空间的大小由字长决定,字长决定的最重要的系统参数就是虚拟地址空间的最大大小。对于一个字长为w位的机器而言,虚拟地址的范围为0-2w-1,程序最多访问2w个字节
-最低有效字节在最前面的方式称为小端法,最高有效字节在最前面的方式称为大端法
-强制类型转换:允许一种数据类型引用一个对象,而这种数据类型与创建这个对象时定义的数据类型不同
-布尔代数是研究逻辑推理的基本原则,通过布尔代数进行集合运算可以获取到不同集合之间的交集、并集或补集,进行逻辑运算可以对不同集合进行与、或、非。C语言的一个很有用的特性就是它支持按位布尔运算。布尔代数:将逻辑值TRUE和FALSE编码为二进制0和1,设计出的一种研究逻辑推理基本原则的代数
-~对应于NOT,&对应于AND,|对应于OR,^对应于异或
-逻辑运算符和对应的位运算之间的重要区别是:逻辑运算认为,所有非零参数都为TRUE,参数0为FALSE,返回值分别为1和0;如果对第一个参数求值就能确定表达式的结果,那么就不会对第二个参数求值
2.整数表示
-int可以用2字节实现,long4字节,long long至少8字节
-无符号的二进制数,每个介于0~2^w-1之间的数都有唯一一个w位的值编码
-补码编码最常见的有符号数的计算机表示方式就是补码形式。在这个定义中,将字的最高有效位解释为负权。所能表示的数值范围[-2(w-1)~2(w-1)-1],在可表示的范围内每个数字 都有一个唯一的w位的补码编码,函数为一个双射
-处理同样字长有符号数和无符号数之间的互相转换:数据可能会变,但是位模式不变
-零扩展将一个无符号数转换为一个更大的数据类型,只需要简单地在表示的开头添加0
-扩展一个数字的位表示
零扩展:无符号数
符号扩展:有符号数
short转换成usigned时,先转换大小,转换成int,再变成无符号数
3.整数运算
-溢出是指完整的整数结果不能放到数据类型的总长限制中去
-补码加法 负溢出,加2^w 正溢出,减2^w
-补码的非 除-2^(w-1)的补码为本身之外,其他补码都为-x
-无符号乘法 等价于计算乘积模2^w
-乘常数 将整数拆成2的幂相加,再利用移位进行计算(左移),最后将结果相加。同理,对于非负数来说,算术右移k位与除以2^k是一样的
4.浮点数
-IEEE浮点标准用V=(-1)sM2E的形式表示一个数
-符号s决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号位解释作为特殊情况处理
-尾数:M是一个二进制小数,范围是12-e或01-e
-阶码:E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)
-根据exp的值,被编码的值分为三种情况:exp的位模式既不全为0,也不全为1;阶码域为全0;阶码全为1
-舍入因为表示方法限制了浮点数的范围和精度,浮点运算只能近似地表示实数运算。因此,对于值x,我们一般想用一种系统的方法,能够找到“最接近的”匹配值x',它可以用期望的浮点形式表示出来
-c语言中的浮点数转换:int/float转换成double,能保留精确数值;double转换成float,值可能被溢出,还可能被舍入;float/double转换成int,值将会向零舍入
重点考核内容
p25:gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
p28:强制类型转换,在最后的编译出现了问题,提示并没有主函数,所以自己添加了一个主函数进去后进行编译
p32:p32:所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算
p33: 掩码是位运算的重要应用,对特定位可以置一,可以清零
p38: 要用C99中的“long long”类型,编译是要用 gcc -std=c99
p39: 补码的利用寄存器的长度是固定的特性简化数学运算。想想钟表,12-1 等价于 12 + 11,利用补码可以把数学运算统一成加法,只要一个加法器就可以实现所有的数学运算。
p44: 注意C语言中有符号数和无符号数的转换规则,位向量不变。想想第一章说的 信息就是“位+上下文”
p49: 0扩展和符号扩展
0扩展:多用于无符号数转换为一个更大的数据类型。只需在开头加上0即可。
符号扩展:多用于补码数字转换。最高有效位是什么,就添加什么。
p67: 浮点数有科学计数法的基础就不难理解,IEEE标准754
p68: 浮点数运算的不精确性与舍入
p70: IEEE浮点标准,float/double类型
p74: 整数与浮点数表示同一个数字的关系
教材学习中的问题和解决过程
在学习书本内容的时候,28页的代码太奇怪了。。没有主函数,在百度咨询后添加了一个主函数就可以运行了
本周代码托管截图
https://git.oschina.net/sssqykdky/Linux20145229
其他(感悟、思考等,可选)
这周的学习内容挺多的,第二章有60页,内容十分繁多,但是好在有老师给了一个重点知识,跟着重点知识走,什么东西应该了解,什么东西应该深入学习,这样下去倒是节省了不少时间,跟着书上的代码走的时候28页少了一个主函数无法运行,怪自己的编程太差找到了问题却没办法解决,上网百度问同学一系列活动之后才添加好了主函数可以成功运行编译,不得不感叹学习知识需要一环扣一环,少了哪一个步骤都会影响后面的学习,自己要学会找到方法去改进自己的不足。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/200 | 2/2 | 20/20 | |
第二周 | 300/300 | 3/3 | 15/15 | |
第三周 | 96/96 | 4/4 | 10/10 |