20144303 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
信息的表示与存储
1、三种数字:
- 无符号数:基于传统二进制表示法,表示大于或等于0的数字
- 补码:编码是表示有符号数的最常见方式
- 浮点数:表示实数的科学计数法的以2为基数的版本
2、整数溢出:
一个整数是一个固定的长度,它能存储的最大值是固定的,当尝试去存储一个大于这个固定的最大值时,将会导致一个整数溢出。
3、信息存储:
- 大多使用8位的块,字节,作为最小存储器单位
- 地址:存储器中每一个字节都有一个唯一的数字来作为其标识
- 虚拟地址空间:即所有可能的地址的集合
4、进制转换:
二进制、八进制、十进制、十六进制(转换:以二进制作为中间变量)
5、字:
每台计算机都有一个字长,指明整数和指针数据的标称大小,因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。
当今大多数计算机已经是64位,书上的32位已经是几年前的数据了。
对于一个字长为w位的机器来说,虚拟地址的范围是0~2^w-1。程序最多访问2的w次方个字节。
6、gcc -m32/64:
可以在64位机上生成32位的代码。
7、数据大小:
不同数据类型在32位、64位机器中所占字节数不同,以c语言为例,long int&char *在32位机器中占4个字节但是在64位中占8个字节,所以同样的数据类型声明在不同位数机器上可能会导致错误
8、字节顺序:
打端法:小对小,大对大。
小端法:与大端法相反。
9、布尔代数:
逻辑运算:
- 逻辑与(&&) 遇0为0;
- 逻辑或(||) 遇1为1;
- 逻辑非 遇0为1,遇1为0;
位运算:
- 按位与(&) 二进制每一位遇0为0;
- 按位或(|) 二进制每一位遇1为1;
- 按位异或(^) 00=0,01=1,10=1,11=0;
- 按位取反(~) 二进制每一位取反。
逻辑运算与掩码运算:
- 逻辑运算结果是1或0,位运算结果是位向量
- 如果对第一个参数求值就能确定表达式的结果,逻辑运算符就不会对第二个参数求值。
10、整数表示:
- 程序语言中各数据类型都有最大值以及最小值,不在范围内会发生溢出
- c,c++支持有符号数以及无符号数,java只支持无符号数
- 无符号数编码:例如向量x,可以写成[Xn , ... , X0]。如果把向量X看做一个二进制数,那么后者就是他的无符号表示
- 双射:对应每一个长度为w的位向量,都有一个唯一的值来与之对应
- 补码编码:补码最高位为符号位,其为1时,代表该数值为负,其为0时,代表该数为非负(在计算机中基本所有的有符号数都使用补码表示)
- java中对于整数数据类型的取值范围和表示有着十分明确的标准,这是java在任何机器上都能运行表现一致的原因所在
- c语言中允许有符号数与无符号数之间进行转换,但其原则是底层的位保持不变。且c语言中支持不同数字类型之间做强制类型转换,例如(unsigned)u可以将u转换成一个无符号数
- 零拓展:在一个无符号数开头简答的添加0,就可以将其转换成一个更大的数据类型
- 符号拓展:在一个有符号数表示中添加最高有效位的值的副本,将一个补码数字转换成更大的数据类型
11、浮点数:
- IEEE:V = (-1)s * M * 2E
- s-符号 0为正,1为负
- M-小数
- E-阶数
- 向偶舍入(默认):将数字向上或向下舍入,是的结果的最低有效数字为偶数。能用于二进制小数。
- 向零舍入:把整数向下舍入,负数向上舍入。
- 向下舍入:正数和负数都向下舍入。
- 向上舍入:正数和负数都向上舍入。
- float中:s、exp和frac字段分别为1位、k = 8 位和n = 23位,得到一个32位的表示
- double中:s、exp和frac字段分别为1位、k = 11 位和n = 52位,得到一个64位的表示
- 整数与小单精度数的转换:符号位+阶数加127的二进制数+去掉开头1位的数+十个0。
教材学习中的问题和解决过程
在学习“寻址和字节顺序”这部分内容时,输入P28 图2-4的代码,出现了错误。
刚开始,编译出现错误。
之后仔细检查代码,发现是代码打错了。打成了 #include <stdion.h>
修改后再次编译,还不是成功。
然后询问了同学,在这段代码中加入了主函数main。问题得以解决。
本周代码托管截图
其他(感悟、思考等,可选)
这周主要是课本上内容的学习,以及代码的实践。学习过程中,遇到了一点代码上的问题,后来通过询问同学都解决了。本周的学习还算比较轻松。最后,祝大家国庆节快乐!!!!!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 20/20 | |
第二周 | 300/300 | 1/2 | 20/40 | |
第三周 | 300/600 | 1/2 | 20/60 |