20145237 《信息安全系统设计基础》第三周学习总结
2017-2018-1 20145237 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
去年休学前已经进行过本章的学习
http://www.cnblogs.com/20145237fhn/p/5928238.html
计算机中三种最重要的数字表示
无符号数:基于传统二进制表示法,表示大于或等于0的数字
补码:编码是表示有符号数的最常见方式
浮点数:表示实数的科学计数法的以2为基数的版本
溢出:计算机用有限数量的位来对应一个数字编码,因此存在结果太大无法表示的状况,即溢出
信息存储
字:
每个计算机都有一个字长,指明整数和指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长最重要的系统参数就是虚拟地址空间的最大大小。
对于一个字长为w位的机器而言,虚拟地址的范围为0~2w-1,程序最多访问2w字节。
使用C99特性:当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码;gcc -m32可以在64位机上(比如实验楼的环境)生成32位的代码
字节顺序:字节顺序是网络编程的基础,是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。
小端法:低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
大端法:高字节数据存放在低地址处,低字节数据存放在高地址处。教材学习中的问题和解决过程
布尔代数
逻辑运算
结果是1或0
所有逻辑运算都可以用与、或、非表达(最大式、最小式)而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。
逻辑与(&&) 遇0为0;
逻辑或(||) 遇1为1;
逻辑非 遇0为1,遇1为0;
位运算
结果是位向量
按位与(&) 二进制每一位遇0为0;
按位或(|) 二进制每一位遇1为1;
按位异或(^) 00=0,01=1,10=1,11=0;
按位取反(~) 二进制每一位取反。
掩码运算
掩码是位运算的重要应用,这里掩码是一个特定位模式,表示从一个字中选择一个位的集合。对特定位可以置一,可以清零。
逻辑运算与掩码运算
逻辑运算结果是1或0,位运算结果是位向量
如果对第一个参数求值就能确定表达式的结果,逻辑运算符就不会对第二个参数求值。
length=0时会出现存储器错误,这是因为参数length是无符号的,计算0-1将进行无符号运算,等价于模数加法,结果得到UMax。因为任何数都是小于等于UMax的,所以<=比较总是为真,代码将访问数组a的非法元素。
解决办法:1.将length声明为int类型 2.将for循环测试条件改为i>length
代码调试中的问题和解决过程
最后发现是没有主函数 书上给出的代码中都无主函数 都需要自己添加一个主函数即可运行
下面是运行结果:
代码托管
其他(感悟、思考等,可选)
第二章中涉及的计算很多,我做练习的时候又很多都做的很慢,有些知识不是很能理解透彻,希望老师在课上时能讲几道具体例子方便加深理解。