2017-2018-1 20155217 《信息安全系统设计基础》第三周学习总结
Posted on 2017-09-30 14:11 20155217杨笛 阅读(181) 评论(0) 编辑 收藏 举报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小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)