• 计算机基础_数据的表示


    一,数据的表示

    机器数:各种数据在计算机中的表现形式称为机器数,机器数的特点是数的符号用0和1表示,机器数对应的实际数值称为该数的真值

    机器数分为两种
    1)无符号:无符号的表示正数,在机器中没有符号位
    2)带符号:机器数的最高位表示正负的符号位

     # 原码,反码,补码,移码

    1)原码:在原码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号,余下的各位为数的绝对值

    [+0]原 = 00000000   [-0]原 = 10000000

    2)反码:在反码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号。当符号位为0时(正数),其余的几位为该数的二进制数;当符号位为1时(负数),要将剩下的几位按位取反(符号位不变)

    [+0]反 = 00000000    [-0]反 = 11111111

    3)补码:在补码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号,当符号位为0时(正数),其余的几位为该数的二进制数;当符号位为1时(负数),要将剩下的几位按位取反(符号位不变)且最低位加1

    [+0]补 = 00000000    [-0]补 = 00000000

    4)移码:将补码的符号位按位取反

    [+0]补 = 00000000    4[+0]移 = 10000000

    # 定点数和浮点数

     1)定点数:小数点固定不变的数,即约定机器中所有数据的小数点位置是不变的。

    固定的小数点的位置决定了固定为数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数
      定点整数:纯整数,小数点在最低有效位之后   111.
      定点小数:存小数,小数点在最高有效位之前   .111

    定点数所能表示的范围较小,在运算的过程中容易溢出,所以就有了下面的浮点数表现形式

    2)浮点数:小数点位置不固定的数,能够表示的范围更加的大

    这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如100.11利用科学计数法可以表示位1.0011*102,其中1.0011为尾数,10为基数,2为指数。

     阶符 阶码  数符  尾数

    注:很明显,一个浮点数的表示不是唯一的,当浮点数小数点的位置发生改变时,阶码也会随着改变,因此可以利用多个浮点的形式表示同一个数。一个十进制可以写成多种形式,一个二进制也能写成多种形式。例如1011.1100可以写成 0.10111100*104,也可以写成 10.111100*102
    浮点数通常表示成N = M*R^E

    注:浮点数所能表示的数值范围由解码决定,精度由尾数决定

    3)IEEE754
    IEEE754是由IEEE(电气和电子工程师协会)制定的有关浮点数的工业标准,是20世纪80年代以来最为广泛使用的浮点数运算标准,为许多的CPU所使用
    IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。

     ## 校验码

     什么是校验码:在计算机运行时,各个部件之间要进行数据的交换,有两种方法可以确保数据在传送过程中的正确无误,一是提高硬件电路的可靠性,二是提高代码的校验能力,校验能力包括查错和纠错。通常利用校验码来检测传送的数据是否出现错误

    校验码的基本思想:将数据可能出现的编码分为两大类:合法编码和错误编码,合法编码用于传送数据,错误编码是不允许在数据中出现的编码

     码距:一个编码系统中任意两个合法编码之间至少有多少个二进制位不同

    码距:两个码字A和B之间不同的比特数,如1010和0011的码距为2;1111和0000的码距为4

    要想纠错和检错,必须满足两个条件:

    1:在一个码组内为了检测e个误码,要求最小的码距d应满足:d>=e+1

    2:在一个码组内为了纠正t个误码,要求最小的码距应满足d>2t+1

    3:用时纠错和检错:d>=e+t+1

    例子一:不具备纠错能力也不具备检错能力

    若用一位的二进制编码,A=1,B=0,则 A B之间最小的码距为1

    合法码:(0,1)  非法码(0,1)

    上方无检错纠错能力,例如当传送的正确编码为1时,在传送过程中出错变为0,而0也是合法编码,故不能判断是否出错

    例而二:具备检错能力,但不具备纠错能力

    若用两位的二进制编码,A=11,B=00

    合法码:(11,00)  非法码:(01,10)

    上方具备检错,但无法纠错,因为无论A(11)或者B(00),如果一位编码发生错误,都将变成01或者10,01和10都为非法码组,接收端能判断出错,但不能判断是A(11)还是B(00)造成的错误

    例子三,具有检错能力也具有纠错能力

    若用三位的二进制编码,A=111,B=000,则AB间最小的码距为3

    合法码(111,000)  非法码(001,010,011,100,101,110)

    当只有一位出错时:上方具有检错和纠错能力,例如当信息为A(111)时产生一位的错误,错误码将有三种表现形式(110,101,011),这些都是非法码组,可以确定其为误码,这三个非法码组离111非常近,而又离000非常远,可以确定其为A(111)的误码,只要将其中的0改为1即可纠正

    当有两位出错时:例如A(111)变成了 100 ,接收端无法确定是A(111)还是B(000)产生的错误,接收端只能检验错误,无法纠正错误

    当有三位出错时:信息将从一个合法编码A(111)或则B(000),变成合法编码B(000)或则A(111),故无法纠错也无法检错

     1:奇偶检验码

    通过在编码中增加一位校验码来使编码中的1的个数变为奇数(奇校验),或则偶数(偶校验),从而使码距变为2,对于奇校验,它可以检测代码中奇数位出错的编码,但不能发现偶数位出错的情况;当合法编码中的奇数位发生了错误时,即编码中的1变成0,或者0变成1时,则编码中1的个数的奇偶性就发生了变化,从而可以发现错误

    原编码 奇校验 偶校验
    0000 0000 1 0000 0
    0001 0001 0 0001 1
    0010 0010 0 0010 1
    0011 0011 1 0011 0

    常用的奇偶校验码:水平奇偶校验码,垂直奇偶校验码,水平垂直检验码

    水平奇偶校验码

    原码 水平奇校验码
    0000 0001 0000 0001 0
    0000 0010 0000 0010 0
    0000 0011 0000 0011 1
    0000 0100 0000 0011 0

    垂直奇偶校验码:将数据分成若干组,每组排成一行,再加一行校验码

    原编码 垂直奇校验 垂直偶校验
    1101 1001 1101 1001 1101 1001
    0101 0010 0101 0010 0101 0010
    0011 0011 0011 0011 0011 0011
    1100 0100 1100 0100 1100 0100
    . 1000 0011(该行为校验位) 0010 1100(该行为校验位)

    水平垂直奇偶校验码:同时利用水平校验和垂直校验

    原编码 奇校验 偶校验
    1101 1001 1101 1001 0 1101 1001 0
    0101 0010 0101 0010 0 0101 0010 0
    0011 0011 0011 0011 1 0011 0011 1
    1100 0100 1100 0100 0 1100 0100 0
      1000 0011 0(该行为校验位) 0010 1100 1(该行为校验位)

    2:海明码

     Hamming Code是一种利用奇偶性来纠错检测的校验方法。海明码的构成方法是在数据位之间的特定位置上插入k个校验位,通过扩大码距来实现检错和纠错

    设数据位为n位,校验位为k位,则n和k必须满足关系   2k-1>=n+k

     设k个校验位为Pk,Pk-1....P1,n个数据位为Dn-1,Dn-2....D1,D0,对应的海明码为Hn_k,Hn+k-1....H1 

    Pi在海明码的第2^i+1位置,即Hi=Pi,且j=2^i-1

    如果有8位的数据位,进行海明码的校验需要4个校验位(2^4-1=15>8+7)

    得到的海明码为:

    H12  H11  H10  H9  H8  H7  H6  H5  H4  H3  H2  H1
    D7    D6    D5    D4  P4  D3  D2  D1  P3  D0  P2  P1 

     待完成....

  • 相关阅读:
    Linux中python更换pip源
    Centos7安装yarn
    协方差矩阵
    详解UML中的6大关系(关联、依赖、聚合、组合、泛化、实现)
    c# XML和实体类之间相互转换(序列化和反序列化)(转)
    C++函数传递类对象和类对象的引用
    C++三种继承方式
    1200. 最小绝对差(排序)
    1218. 最长定差子序列(动态规划)
    1009_Product of Polynomials (25分)[模拟]
  • 原文地址:https://www.cnblogs.com/Doaoao/p/10232262.html
Copyright © 2020-2023  润新知