博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2017-2018-1 20155217 《信息安全系统设计基础》第三周学习总结

教材学习内容总结

  • 无符号编码基于传统的二进制表示法,表示大于或等于0的数字。补码编码是表示有符号整数最常见的方式,有符号整数是可以为正货为负的数字。浮点数编码是表示实数的科学计数法的以2为基数的版本。
  • 大多数64位机器可以运行32位机器编译的程序,这是一种向后兼容。例如,当程序prog.c用如下伪指令编译gcc -m32 prog.c该程序就可以在32位或64位机器上正确运行;而该程序用gcc -m64 prog.c运行后,只能在64位机器上运行。
  • 小端法:高对高,低对对;大端法:从视觉上,是这次阅读的顺序,与小端法相反。使字节顺序变得可见的三种方式:不同类型的机器之间通过网络传送二进制数据时,网络应用程序的代码编写必须遵守已建立的关于字节顺序的规则;使用反汇编器,处理整数数据的字节序列的存储字节顺序问题;当编写规避正常的类型系统的程序时。
  • 逻辑运算容易与位运算相混淆,但他们的功能是完全不同的。逻辑运算认为所有非零的参数都表示true,而参数0表示false。他们返回0或1,分别表示结果为true或false。而按位运算只有在特殊情况下,也就是参数被限制为0或1时,才和与其对应的逻辑运算有相同的的行为。
位运算:
|:或  
&:与  
~:取反  
^:异或 
逻辑运算:
逻辑运算符:||(或)、&&(与)、!(非)  
  • 要用C99中的“long long”类型,编译时要用gcc -std=c99
  • 有符号数和无符号数之间的转换:
处理同样字长的有符号数和无符号数之间相互转换的一般规则:
数值可能会改变,但是位模式不变。

c语言允许无符号数和有符号数之间的转换。转换的原则是底层的位表示不变。

当从无符号数转换为有符号数是,效果是应用函数U2T,从有符号数转化为无符号数时,应用函数T2U,其中w表示数据类型的位数。

负数和正数相等的情况:u=2147483648 =-2147483648
(当输出分别为无符号形式和有符号形式时)
  • 在负数x后加上U,可以使其转换为(2^w+x),就可以让负数等于正数
  • 对于范围-2(w-1)≤x<-2(w-1)内的x,补码的非运算如下:
1.x=-2^(w-1):补码的非为-2^(w-1)
2.x>-2^(w-1):补码的非为-x 
  • 求位级补码非的方法:
对每一位求补,再对结果加1          
建立在将位向量分为两部分的基础之上的
  • 无符号乘法:
两个数x、y相乘且x、y的位数为w,则结果的位数为2w。
  • 补码乘法:
同无符号乘法。 若为截断后的结果,则取结果的后w位作为计算结果。
注意:无符号运算和补码运算在“+”、“-”、“*”在位级上有相同的结果。
  • IEEE浮点数表示:

    • 表示形式为:V = (-1)^s * M * 2^E
    • 符号:s决定这个数是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理。
    • 尾数:M是一个二进制小数,它的范围是1 ~ 2-ε,或者是0 ~ 1-ε。
    • 阶码:E的作用是对浮点数据加权,这个权重是2的E次幂(可能是负数)。
    • 根据阶码的值,可分为一下三种情况:
   情况一:规格化的值 (当阶码字段不全为0或全为1时)
   E = e-Bias
   Bias = 2^(k-1)-1 
   M = 1+f 

   情况二:非规格化的值 (当阶码字段全为0时)
   E = 1-Bias
   Bias = 2^(k-1)-1 
   M = f

   情况三:特殊值 (当阶码字段全为1时)
   当小数域全为0时, 当s=1时,为-∞;当s=0时,为+∞。
   当小数域不全为0时,为NaN。
  • 浮点数的舍入

    有四种情况分别是:

    向偶数舍入(默认)
    向零舍入
    向下舍入
    向上舍入
  • 浮点运算
   浮点加法:不满足结合性、满足单调性 

   浮点乘法:不满足结合性、满足单调性,在加法上不满足分配性

教材学习中的问题和解决过程

  • 问题1:

    length=0时会出现存储器错误,这是因为参数length是无符号的,计算0-1将进行无符号运算,等价于模数加法,结果得到UMax。因为任何数都是小于等于UMax的,所以<=比较总是为真,代码将访问数组a的非法元素。

  • 问题1解决方案:

    • 将length声明为int类型
    • 将for循环测试条件改为i>length

代码调试中的问题和解决过程

代码托管

上周考试错题总结

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 其他

本周结对学习情况

- [20155236](http://www.cnblogs.com/fcgfcgfcg/)
- 结对照片
- 结对学习内容
    - 浮点加法:
      浮点加法是可交换的。
      浮点加法不具有结合性,这是缺少的最重要的群属性。
      浮点加法满足了单调性属性:如果a≥b,那么对于任何a、b以及x的值,除了NaN,都有x + a ≥ x + b。无符号或补码加法不具有这个实数(和整数)加法的属性。
    - 浮点乘法:

      浮点乘法是可交换的
      浮点乘法不具有结合性
      浮点乘法的单位元为1.0
      浮点乘法在加法上不具备分配性
    - ......

其他(感悟、思考等,可选)

“精读”背后要多付出的精力、时间,与泛读甚至浏览完全不在同一个层次上。第二章一共60页,坚持每一页的每一句话都看到心里去,说不乏味不疲倦是不可能的。尤其是在假期期间,想要静下心来太难了,但是细读的收获又是显著而充实的。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 85/85 1/1 6/6
第二周 85/85 1/1 6/6
第三周 91/176 3/4 12/18

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:16小时

  • 实际学习时间:12小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料