20145237 《信息安全系统设计基础》第3周学习总结
20145237 《信息安全系统设计基础》第3周学习总结
教材学习内容总结
计算机中三种最重要的数字表示
无符号数:基于传统二进制表示法,表示大于或等于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,位运算结果是位向量
如果对第一个参数求值就能确定表达式的结果,逻辑运算符就不会对第二个参数求值。
p20: 三种数字:无符号数、有符号数(2进制补码)、浮点数
无符号数:基于传统二进制表示法,表示大于或者等于零的数字。
补码:表示有符号整数的最常见方式
浮点数:表示实数的科学计数法的以二为基数的版本。
p22: 二进制、八进制、十进制、十六进制进制转换(方法:使用二进制作中间结果)
十六进制:以0x或0X开头表示,字符A-F可大写、可小写、也可混用。
p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码
p26: 字节顺序是网络编程的基础,记住小端是“高对高、低对低”,大端与之相反就可以了。注:小端法——指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
大端法——是高字节数据存放在低地址处,低字节数据存放在高地址处
p32: 能区分逻辑运算(结果是1或0)和位运算(结果是位向量),所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。
p33: 掩码是位运算的重要应用,对特定位可以置一,可以清零
p39: 补码的利用寄存器的长度是固定的特性简化数学运算。
正数的补码=原码
负数的补码=原码各位取反再加1
p44: 有符号数和无符号数的转换
强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。即:这些位上的值不变,但是由于最高有效位的权重发生变化,从而导致结果发生改变。
处理同样字长的有、无符号数之间相互转换的规则:数值可能会变,但是位模式不变。(底层的位表示保持不变)
p48: 怎么样让负数等于正数?
在负数x后加上U,可以使其转换为(2^w+x)
p49: 0扩展和符号扩展
零扩展:多用于无符号数转换为一个更大的数据类型。只需在开头加上0即可。
符号扩展:多用于补码数字转换。最高有效位是什么,就添加什么。
p52: 深入思考一下代码和结果
length=0时会出现存储器错误,这是因为参数length是无符号的,计算0-1将进行无符号运算,等价于模数加法,结果得到UMax。因为任何数都是小于等于UMax的,所以<=比较总是为真,代码将访问数组a的非法元素。
解决办法:1.将length声明为int类型 2.将for循环测试条件改为i>length
代码调试中的问题和解决过程
p28代码刚开始运行时没有成功,原因是没有主函数,添加主函数后运行成功,以下是结果。
作业56