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

it2022-05-09  39

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

教材学习内容总结

一、实验楼实验三总结

gcc编译 使用c99特性 gcc -o c99 -std=c99 c99.c

编译为32位机器码gcc -o m32 -m32 m32.c

教材导读 无符号编码基于传统的二进制表示法,表示大于等于零的数字。补码编码(有符号整数)可以为正或者负的数字。浮点数编码表示实数的科学计数法的以2位基数的版本。进制转换:以二进制结果作为中介。字节顺序:在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。小端法:最低有效字节在前;大端法则反之。需注意,比如0x12345678,78是低位,12是高位。

执行show-bytes.c。

位运算与逻辑运算:位运算是指两个或多个数值逐位运算,比如1011|0101=1111;逻辑运算只有真假即true false;非0即为真,0为假。比如1011||0101,1011和0101都是非0,所以等同于1||1,结果为真。0扩展:[1,0,1,1]->[0,0,0,1,0,1,1];符号位扩展[1,0,1,1]->[1,1,1,1,0,1,1]。整数运算的溢出:如9[1001]+12[1100]=21[10101],取4位的话5[0101]=21 mod 16。整数运算实际上是一种模运算形式。浮点数表示对形如V=x * 2^y的有理数进行编码。不太关注运算的精确性,而把实现的速度和简便性看得比数字精确性更重要。IEEE浮点标准用V = (-1)^s * M * 2^E的形式来表示一个数。其中s(sign)称符号,M(尾数)是二进制小数

整数与浮点数转换规则:

int->float :不会溢出,可能舍入 int/float->double :保留精确数值 double->float :可能溢出成无穷,可能被舍入。 float/double->int :向0舍入。

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

问题1:如何理解IEEE浮点标准?

问题1解决方案:需要做的是先记住几个公式:

规格化值: E=e-Bias Bias=2^(k-1)-1 M=1+f e[k-1];f[n-1] 非规格化值: E=1-Bias Bias=2^(k-1)-1 M=f e[k-1];f[n-1] 特殊值: 阶码(e)全为1时,小数域(f)全为0时,得到的值表示无穷,小数域(f)不全为0时,结果值被称为“NaN”(Not a Number)。

了解这些,来看书上的示例:

计算过程已经标注在图上。

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

问题1:习题2.11实现将一个数组元素头尾依次对调。问题1解决方法: #include <stdio.h> void inplace_swap(int *x,int *y){ *y=*x^*y; *x=*x^*y; *y=*x^*y; } void reverse_array(int a[],int cnt){ int first,last; for(first=0,last=cnt-1;first<last;first++,last--) inplace_swap(&a[first],&a[last]); } void main(){ int num[5]={1,2,3,4,5}; int i=0; reverse_array(num,5); for(i=0;i<5;i++){ printf("%d ",num[i]); } }

运行结果截图:

代码托管

结对及互评

本周结对学习情况

20155313

结对学习内容 IEEE浮点标准。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长目标5000行30篇400小时第一周195/1951/110/10第三周314/7061/215/25

计划学习时间:12小时

实际学习时间:15小时

参考资料

《深入理解计算机系统V3》学习指导

转载于:https://www.cnblogs.com/zhuohua/p/7670371.html


最新回复(0)