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

    20145301 《信息安全系统设计基础》第3周学习总结

    教材学习内容总结

    第二章-信息的表示和处理

    • 三种数字表示
      无符号数:基于传统的二进制表示法,表示大于或等于零的数字
      补码:表示有符号数,可为正可为负的数字
      浮点数:表示实数的科学计数法的以二为基数的版本
    • 信息存储
      字节:计算机最小的可寻址的存储器单位——字节
      一个字节的值域:00H-FFH

    • 字:每个计算机都有一个字长,指明整数和指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长最重要的系统参数就是虚拟地址空间的最大大小。
      对于一个字长为w位的机器而言,虚拟地址的范围为0~2^w-1,程序最多访问2^w字节。w=32或64:也就是我们通常所说的电脑是32位还是64位。也可以理解为CPU一次处理数据的位数。

    • 数据大小:C99特性:当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码;gcc -m32 XXX.c

    • 寻址和字节顺序:小端法:最低有效字节在前面——“高对高,低对低”。(一般用到的是小端法,比如在X86汇编中我们接触到的就是小端法。)
       大端法:最高有效字节在前面。

    • 布尔代数
      运算符号:与:&&(位与:&)
      或:||(位或:|)
      非:!(位非:~)
      位异或:^

    • 位向量:有固定长度为w、由0和1组成的串。位向量的应用——表示有限集合。

    • 掩码运算:掩码是位运算的重要应用,这里掩码是一个特定位模式,表示从一个字中选择一个位的集合。对特定位可以置一,可以清零。

    • 整数表示
      整型数据类型表示有限范围的整数,每种类型都能用关键字来指定大小,还可以指定是非负数(unsigned)还是负数(默认)。这些不同大小的分配的字数会根据机器的字长和编译器有所不同。
      取值范围32位机器和64位机器对于同一数据类型的典型取值范围是有所不同的。
      典型取值范围中,取值范围不对称——负数的范围比整数的范围大1。

    • 补码编码——有符号数的编码我们都知道补码的最高位是表示符号位,解释为负权,“权重”为-2的(w-1)次方,即无符号表示中的权重的负数。符号位为1,表示值为负,符号位为0,表示值为非负(不是正,因为有0)
      补码的映射关系同样是一一对应的
      补码的范围:-2^(w-1)~2^(w-1)-1

    • 有符号数和无符号数的转换处理同样字长的有符号数和无符号数之间相互转换的一般规则:数值可能会改变,但是位模式不变。
      c语言允许无符号数和有符号数之间的转换,转换的原则是底层的位表示不变。
      当从无符号数转换为有符号数是,效果是应用函数U2T,从有符号数转化为无符号数时,应用函数T2U,其中w表示数据类型的位数。

    • 扩展从一个较小的数据类型转换为较大的数据类型,同时保持数值不变。
      零扩展:多用于无符号数转换为一个更大的数据类型。只需在开头加上0即可。
      符号扩展:多用于补码数字转换,最高有效位是什么,就添加什么。

       无符号数适用范围适用于没有任何数字意义的位的集合,比如地址;
       又或者实现模运算、多精度运算的时候,数字由字的数组表示的时候。

       有符号数适用范围编程中多用有符号数

    • 整数运算
      无符号运算无符号运算本质上就是模运算,mod 2的w次幂。
      加法涉及到的相关知识有:交换群(阿贝尔群),单位元,加法逆元等等。计算起来很简单。

    • 乘法两个w位的无符号数相乘,实际上是截取了低w位,但是等价于mod 2的w次幂。
      总之就是模幂运算。

    • 补码运算加法运算:两个数的w位补码之和与无符号之和有完全相同的位级表示。
      溢出:补码加法的溢出情况比无符号运算更为复杂,分为正溢出、正常、负溢出。正溢出就是超过正数的最大范围,负溢出就是超过负数的最大范围,具体的公式在书58页,正负溢出的范围和原因,直观一点的图在59页。
      但是其实公式里给的本质仍然是模运算,模掉w位的补码最高有效位的权重2的w次幂。

    • 非运算:对于范围在[-2^(w-1),2^(w-1))
      中的x,补码的非运算有如下两种情况:
      x=-2^(w-1)时,为-2^(w-1)
      x>-2^(w-1)时,为-x

    • 乘法运算:同无符号乘法。若为截断后的结果,则取结果的后w位作为计算结果。无符号运算和补码运算在“+”、“-”、“*”在位级上有相同的结果。    

    • 浮点数
      浮点表示对形如V=x X (2^y)的有理数进行编码,适用于:非常大的数字
      非常接近于0的数字
      作为实数运算的近似值
      IEEE浮点标准:IEEE标准754

    • 二进制小数:二进制点左边第i位,权为2^i;右边第i位,权为(1/2)^i。
      增加二进制表示的长度可以提高表示的精度。

    • IEEE浮点格式:表示形式:V=(-1)^s 2^E
      符号:s决定这个数是正还是负。0的符号位特殊情况处理。
      尾数:M是一个二进制小数,范围为1~2-ε
      或者0~1-ε,ε=(1/2)^n

    • 浮点数的舍入:IEEE浮点格式定义了四种不同的舍入方法:向偶舍入(默认):将数字向上或向下舍入,是的结果的最低有效数字为偶数。能用于二进制小数。
      向零舍入:把整数向下舍入,负数向上舍入。
      向下舍入:正数和负数都向下舍入。
      向上舍入:正数和负数都向上舍入。

    • 浮点运算:浮点加法:不满足结合性、满足单调性。
      浮点乘法:不满足结合性、满足单调性,在加法上不满足分配性。

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

      • p24中perl在Linux下的安装
        安装步骤如下:
        1、在官方网站下载新版本的源码包:
        http://www.perl.org/get.html,版本自己选择
        2、解压/usr/local/src下的perl-5.12.2.tar.gz
        # tar zxvf perl-5.12.2.tar.gz
        3、建立文件目录,以供安装时使用
        # mkdir /usr/local/perl
        4、设置源码
        进入perl-5.12.2.tar.gz的解压目录,执行:
        # ./Configure --help的提示如下:

        Linux下Perl的安装

        查看过后,使用这个指令来设置源码:
        # ./Configure -des -Dprefix=/usr/local/perl -Dusethreads -Uversiononly

      5、编译
      # make
      # make install
      等待这个命令完成后,基本安装就完成了。

      6、替换掉旧的perl命令
      # cd /usr/bin
      # mv perl perl.old //把原来的perl更名为perl.old,弃用。
      # ln ls /usr/local/perl/bin/perl /usr/bin/perl //做一个软链接,使用新的perl

      7、完成
      # perl -version //使用这个命令查看perl的版本

      代码调试中的问题

      P34数组逆序排列:
      当数组的元素个数为偶数的时候可以正常排序
      当数组的元素个数为奇数时中间的一位会是0  

      这是因为当数目为奇数时,会出现first==last的情况,这时调用inplace_swap函数里面的*y = x^y语句时相当于自己异或自己,就会出现0的情况。

      课后作业中的问题和解决过程

      p74 2.48 虽然表示的是同一个值,但表示在十六进制上并不相同

      因为要表示浮点数,数被分为两部分:整数部分和小数部分。例如,浮点数3510593.0就有整数部分3510593和小数部分0.0.首先把浮点数转换成二进制数,步骤如下:1把整数部分转换成二进制.2把小数部分转换成二进制.3在两部分之间加上小数点.浮点数还可以规范化,浮点数可以用单精度表示法和双精度表示法.规范化只存储这个数的三个部分的信息:符号,指教和尾数。

      本周代码托管截图

      代码托管地址
      截图如下:

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

      • 这周的学习内容有许多知识在计算机导论和汇编的课程学习中都有涉及,重新学习的过程中才有了温故而知新的感觉,虽然许多知识处于反复的学习的过程中,但是仍然有许多新的发现与体会,比如补码、反码的计算方法和运算中就有许多新的体会和小的运算技巧。

      学习进度条

       代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
      目标 4000行 24篇 400小时  
      第一周 150/150 1/2 15/15 对Linux有了初步的认识
      第二周 200/350 1/3 20/35 vim的使用
      第三周 250/600 1/4 20/55 各种信息的表示方法

      参考资料

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

      Linux 基础入门(新版)

      《信息安全系统设计基础》 课程教学

      2016-2017-1 《信息安全系统设计基础》教学进程

  • 相关阅读:
    使用shutdown命令实现局域网内远程关机、重启整蛊他人
    在foxmail和outlook中设置QQ邮箱、gmail邮箱、新浪邮箱、微软邮箱、网易邮箱等的方法
    万能驱动助理篡改主页为2345的解决办法
    巧用UserAgent来解决浏览器的各种问题
    各大浏览器保存密码的文件
    使用代理软件之后其他软件不能联网的解决方法
    windows xp/7/8/8.1/10安全模式详解和系统修复讲解
    VirtualBox更改默认路径
    Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法
    xampp打开显示缺少运行库的解决方法
  • 原文地址:https://www.cnblogs.com/5301z/p/5928267.html
Copyright © 2011-2022 走看看