zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155314 《信息安全系统设计基础》第3周学习总结

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

    教材学习内容总结

    学习目标

    • 理解二进制在计算机中的重要地位
    • 掌握布尔运算在C语言中的应用
    • 理解有符号整数、无符号整数、浮点数的表示
    • 理解补码的重要性
    • 能避免C语言中溢出,数据类型转换中的陷阱和可能会导致的漏洞
    • 进一步理解“信息=位+上下文”

    教材内容提炼

    第2章 信息的表示和处理

    • 三种最重要的数字表示
      • 无符号编码:表示大于或等于零的数字
      • 补码编码:表示有符号整数的最常见方式
      • 浮点数编码:表示实数的科学记数法的以2为基数的版本
    • 信息存储
      • 虚拟内存:机器级程序将内存视为一个非常大的字节数组,称为虚拟内存
      • 十六进制表示法
      • 字数据大小
        • 一个字长为w位的机器,虚拟地址的范围为0~2w-1,程序最多访问2w个字节
        • 向后兼容:大多数64位机器也可以运行为32位机器编译的程序
        • ISO C99引入一类数据类型,其数据大小是固定的,不随编译器和机器设置而变化
          • int32_t:4字节
          • int64_t:8字节
        • 对关键字的顺序以及包括还是省略可选关键字来说,C语言允许存在多种形式:如 unsigned longunsigned long intlong unsignedlong unsigned int均等价
      • 寻址和字节顺序
        • 小端法:最低有效字节在最前面
        • 大端法:最高有效字节在最前面
      • 表示字符串
      • 表示代码
      • 布尔代数简介
        • 布尔环中加法运算是,每个元素的加法逆元都是它自己本身,即对于任何值a,**aa=0**
      • C语言中的位级运算(按位布尔运算)
        • |
        • &
        • ~
        • ^
      • C语言中的逻辑运算(逻辑运算认为所有非零的参数都表示TRUE(返回1),而参数0表示FALSE(返回0))
        • ||
        • &&
        • !
      • C语言中的移位运算
        • 左移
        • 右移
          • 逻辑右移:在左端补k个0
          • 算术右移:在左端补k个最高有效位的值
    • 整数表示
      • 整型数据类型
      • 无符号数的编码
      • 补码编码
      • 有符号数和无符号数之间的转换
      • C语言中的有符号数与无符号数
      • 扩展一个数字的位表示
      • 截断数字
      • 关于有符号数与无符号数的建议
    • 整数运算
      • 无符号加法
      • 补码加法
      • 补码的非
      • 无符号乘法
      • 补码乘法
      • 乘以常数
      • 除以2的幂
      • 关于整数运算的最后思考
    • 浮点数
      • 二进制小数
      • IEEE浮点表示
      • 数字示例
      • 舍入
      • 浮点运算
      • C语言中的浮点数
        • int转成float:数字不会溢出,但可能被舍入
        • intfloat转成double:能保留精确的数值
        • double转成float:值可能溢出成+∞或-∞,还可能被舍入
        • floatdouble转成int:值将会向零舍入

    课后实践:myod

    实践要求

    1. 复习c文件处理内容

    2. 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能

    3. main与其他分开,制作静态库和动态库

    4. 编写Makefile

    5. 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

    6. 在博客园发表一篇博客,重点写遇到的问题和解决过程

    我的代码

    #include<stdio.h>
    #include<stdlib.h>
    void myod(char *f);
    int main(int argc,char *argv[]){
        myod(argv[1]);
        return 0;
    }
    
    void myod(char *f){
        FILE *fp;
        char ch;
        char str[16];
        int i=0,j,count=0;
        if((fp=fopen(f,"r"))==NULL){
            printf("ERROR!
    ");
            exit(0);
        }
        while((ch=fgetc(fp))!=EOF){
            str[i]=ch;
            i++;
            if(i==16){
                 i=0;
    	     printf("%07o    ",count);
                 for(j=0;j<16;j++){
                     if(str[j]=='
    ') printf("\n  ");
                 	 else printf("%-4c",str[j]);
    		 count++;
    	     }
                 printf("
    ");
                 printf("           ");
                 for(j=0;j<16;j++)
                 printf("%02x  ",str[j]);
                 printf("
    ");    
    	}
        }
        printf("%07o    ",count);
        for(j=0;j<i;j++){
            if(str[j]=='
    ') printf("\n  ");
            else printf("%-4c",str[j]);
    	count++;
        }
        printf("
    ");
        printf("           ");
        for(j=0;j<i;j++)
        printf("%02x  ",str[j]);
        printf("
    ");
        printf("%07o    ",count);
        printf("
    ");
        fclose(fp);
    }
    

    运行截图

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

    • 问题1:什么是GCC?
      • GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。
    • 问题2:什么是汇编和反汇编?
      • 汇编(Assembly):把汇编语言翻译成机器语言的过程
      • 反汇编(Disassembly):把目标代码转为汇编代码的过程
    • 问题3:什么是GUI?
      • 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

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

    • 问题1:git add .时报错:fatal: Not a git repository (or any of the parent directories)
    • 解决方案:这是由于本地版本管理仓库被删除了,需要用git init命令重新初始化仓库,建立新的仓库:
    • 问题2:git push时报错:fatal: The current branch master has no upstream branch.
    • 解决方案:利用git push -u origin master -f命令强制覆盖已有的分支后再push,push成功:

    代码托管

    上周考试错题总结

    结对及互评

    本周结对学习情况

    • 20155323
    • 结对学习内容
      • 教材第1章 计算机系统漫游

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

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20

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

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

    • 计划学习时间:5小时

    • 实际学习时间:2小时

    参考资料

  • 相关阅读:
    StarUML
    第二周周二日报
    第二周周一日报
    第一周周末报
    第一周周四日报
    第一周第三天日报
    软件开发总结
    构建之法总结
    《构建之法》第六章
    个人日志7
  • 原文地址:https://www.cnblogs.com/crazymosquito/p/7672956.html
Copyright © 2011-2022 走看看