20145222《信息安全系统设计基础》第三周学习总结
20145222《信息安全系统设计基础》第三周学习总结
教材学习内容总结(信息的表示和处理)
信息存储
- 虚拟存储器:计算机级程序将存储器视为一个非常大的字节数组
- 地址:存储器每个字节的唯一数字标识
- 程序对象:程序数据、指令和控制信息
- 十六进制表示法
- 以0X或0x开头的数字常量常被认定为十六进制的值
- 十进制->十六进制:反复地用16除x,余数从最低位开始计
- 字:
- 每个计算机都有一个字长,指明整数和指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长最重要的系统参数就是虚拟地址空间的最大大小。
- 对于一个字长为w位的机器而言,虚拟地址的范围为0~2w-1,程序最多访问2w字节。
- 寻址和字节顺序
- 小端法:最低有效字节在最前面的的方式
- 大端法:最高有效字节在最前面的方式
- 布尔代数:
- 逻辑运算:
- 所有逻辑运算都可以用与、或、非表达(最大式、最小式)而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算
- 逻辑运算符:逻辑与(&&);逻辑或(||);逻辑非(!)
- 位运算:结果是位向量;按位与(&) 二进制每一位遇0为0;按位或(|) 二进制每一位遇1为1;按位异或(^) 00=0,01=1,10=1,11=0;按位取反(~) 二进制每一位取反
- 掩码运算:掩码是位运算的重要应用,这里掩码是一个特定位模式,表示从一个字中选择一个位的集合。对特定位可以置一,可以清零。
整数表示
- 无符号数编码:对于长度为w的位向量,都有一个唯一的值与之对应;反过来,在0~2^w-1之间的每一个整数都有一个唯一的长度为w的位向量二进制表示与之对应。
- 补码编码:补码形式是最常见的有符号数的计算机表示方式;将字的最高有效位解释为负权 B2T(W)函数为:B2T(x) = -x(w-1)2(w-1)+∑xi2i(求和从i=0到i=w-2)
- 有符号数和无符号数之间的转换:
- 处理同样字长的有符号数和无符号数之间相互转换的一般规则:数值可能会改变,但是位模式不变。
- c语言允许无符号数和有符号数之间的转换,转换的原则是底层的位表示不变。 - 扩展一个数字的位表示:
- 零扩展:无符号数
- 符号扩展:有符号数
- short转换成usigned时,先转换大小,转换成int,再变成无符号数 - 截断数字:将一个w位的数截断为一个k位数字时,我们会丢弃高w-k位,等于计算x mod2^k
整数运算
- 无符号数加法:
- 无符号计算可以看作一种模形式的运算
- 无符号加法等价于计算和模2^w
- 溢出:完整的整数结果不能放到数据类型的字长限制中去
- 当且仅当s<w,发生了溢出,溢出则s=x+y-2^w - 补码加法:负溢出,加2w;正溢出,减2w。
- 补码的非:除-2^(w-1)的补码为本身之外,其他补码都为-x
- 补码乘法:和无符号乘法运算的位级相同
- 乘以常数:x<k相当于x*2^k mod2w;对于无符号变量x>>k相当于x/2k
浮点数
- 浮点表示对形如 V=x*2^y 的有理数进行编码;适用于:非常大的数字(|V|>>0)、非常接近于0的数字(|V|<<1)、实数运算的近似值;IEEE浮点标准:IEEE标准754。
- 二进制小数:二进制点左边第i位,权为2i;右边第i位,权为(1/2)i;增加二进制表示的长度可以提高表示的精度。
- IEEE浮点格式:
- 表示形式:V=(-1)^s * M * 2^E
- 符号:s决定这个数是正还是负。0的符号位特殊情况处理。
- 尾数:M是一个二进制小数,范围为12-ε或者01-ε,ε=(1/2)^n。
- 阶码:E对浮点数加权,权重是2的E次幂(可能为负数)。 - C语言中的浮点数:
- int转换成float,数字不被溢出,但是可能被舍入
- int/float转换成double,能保留精确数值
- double转换成float,值可能被溢出,还可能被舍入
- float/double转换成int,值将会向零舍入
教材学习中的问题和解决过程
在练习十进制与十六进制的转换时,将Perl语言脚本直接写进c文件中,发现根本编译不出。如下截图:
在看了卢肖明同学的关于Perl语言脚本运行方法后,明白了Perl语言是另外一种语言,根据小明同学提供的方法最终实现了十进制与十六进制的转换。
本周代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 2/3 | 10/20 | 掌握了几个命令 |
第二周 | 0/0 | 1/4 | 8/28 | 熟练了vim编辑器的操作 |
第三周 | 40/40 | 1/5 | 12/40 | 开始敲代码了 |