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 开始敲代码了

参考资料

posted @ 2016-10-02 23:04  20145222黄亚奇  阅读(181)  评论(3编辑  收藏  举报