zoukankan      html  css  js  c++  java
  • 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小时

    参考资料

  • 相关阅读:
    BZOJ 2064: 分裂( 状压dp )
    BZOJ 2096: [Poi2010]Pilots( set )
    BZOJ 3444: 最后的晚餐( )
    BZOJ 3156: 防御准备( dp + 斜率优化 )
    BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
    BZOJ 2466: [中山市选2009]树( 高斯消元 )
    BZOJ 1316: 树上的询问( 点分治 + 平衡树 )
    codevs 1074
    bzoj 1015
    bzoj 1798
  • 原文地址:https://www.cnblogs.com/jhs888/p/9733700.html
Copyright © 2011-2022 走看看