2018-2019-1 20165202 《信息安全系统设计基础》第二周学习总结

2018-2019-1 20165202 《信息安全系统设计基础》第二周学习总结

教材学习内容总结

一、实验楼实验三总结

  1. gcc编译

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

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

  2. 教材导读

    1. 无符号编码基于传统的二进制表示法,表示大于等于零的数字。补码编码(有符号整数)可以为正或者负的数字。浮点数编码表示实数的科学计数法的以2位基数的版本。

    2. 进制转换:以二进制结果作为中介。

    3. 字节顺序:在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。小端法:最低有效字节在前;大端法则反之。需注意,比如0x12345678,78是低位,12是高位。

    4. 执行show-bytes.c。

    5. 位运算与逻辑运算:位运算是指两个或多个数值逐位运算,比如1011|0101=1111;逻辑运算只有真假即true false;非0即为真,0为假。比如1011||0101,1011和0101都是非0,所以等同于1||1,结果为真。

    6. 0扩展:[1,0,1,1]->[0,0,0,1,0,1,1];符号位扩展[1,0,1,1]->[1,1,1,1,0,1,1]。

    7. 整数运算的溢出:如9[1001]+12[1100]=21[10101],取4位的话5[0101]=21 mod 16。整数运算实际上是一种模运算形式。

    8. 浮点数表示对形如V=x * 2^y的有理数进行编码。不太关注运算的精确性,而把实现的速度和简便性看得比数字精确性更重要。

    9. IEEE浮点标准用V = (-1)^s * M * 2^E的形式来表示一个数。其中s(sign)称符号,M(尾数)是二进制小数

    10. 整数与浮点数转换规则:

    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]);
		}
}

运行结果截图:

[代码托管]

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 195/195 1/1 10/10
第三周 314/706 1/2 15/25
  • 计划学习时间:12小时

  • 实际学习时间:15小时

参考资料

原文地址:https://www.cnblogs.com/jhs888/p/9733700.html