zoukankan      html  css  js  c++  java
  • 预习非数值数据的编码方式

    非数值数据

    逻辑值,字符等数据都是非数值数据 。不是数字的数据都是非数值数据

    逻辑值,西文字符,汉字字符

    正常情况下,每个字或其他可寻址单位是作为一个整体数据单元看待的,但是有时候需要将一个n位数据看成又n个1位数据组成,每个取值0或1
    西文由拉丁字母,数字,标点符号及一些特殊符号所组成,统称为字符。
    汉字也是字符

    数据宽度和储存

    1. 数据的宽度与单位
      计算机内部任何数据都被表示成二进制编码形式。二进制数据的每一位(0 or 1)二进制信息的最小单位,称为一个"比特"(bit),简称"位",bit是计算机中存储,运算和传输信息的最小单位。
      每个西文字符需要用8个比特表示,而每个汉字需要用16个比特才能表示。计算机内部,二进制信息的计量单位是"字节"(Byte),也成为"位组"。 1 Byte = 8 bit
      计算机中运行和处理二进制信息时使用的单位除了比特和字节之外,还经常使用"字"(word)作为单位,必须注意,不同的计算机,字的长度和组成不完全相同,有的由2个字节组成,有的由4个,8个,甚至16个字节组成。
      2.单位换算
      1 B = 8 b
      K :1KB = 2^10 B = 1024 字节
      M :1MB = 2^20 B
      G : 1GB = 2^30 B
      T : 1TB = 2^40 B

    数据校验码

    作用:因为在数据存取和传送的过程中,由于元器件或者噪音的干扰等原因会出现错误,这个时候我们就需要采取相应的措施,发现并纠正错误,对于错误的检测和校正,大多采取“冗余校验”的思想,即除原数据外,额外增加若干位编码,这些新增的代码称为校验位。
    校验过程

    输入的数据m经过f得到p校验位。
    数据m和校验位一起通过存储器或传输线路,分别得到m'和p',这两者可能和m,f相同,也可能由于传输储存发生问题而不同。
    由数据m'再次经过f得到校验位p'',比较p''和p',从而得出是否出错,输出对应的信息,如何比较,会在下面的对应校验码中给出。

    三种常见校码验

    奇偶校验码:无论数据位多少位,校验位只有一位
    数据位和校验位一共所含的1个数为奇数,称为奇校验
    数据位和校验位一共所含的1个数为偶数,称为偶校验

    海明校验码:

    若一共有 k 个数据位,则需要 r个检验位来完成一位纠错,两位检错。
    2^r-1≥k+r
    2^r−1≥k+r
    新生成的数据为 k+r位,其中每个校验位放在2的幂次方的位置上
    其值为原始数据位在新的排列后,其位次的二进制中有对应位的数的异或和
    最后一个校验位的值是前面所有位的异或和,其作用是判断是一位错还是两位错
    当接收方接收数据后。先看最后一位,若是1则代表一位错。具体位置由各个位置的海明码组成的二进制表示。
    若是0,则若是其他位校验码都是0表示传输正确,否则就是两位错。

    循环冗余校验码

    CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码.
    CRC码广泛应用于数据通信领域和磁介质存储系统中.
    在k位信息码后接r位校验码,对于一个给定的(n,k)码
    存在一个最高次幂为 n-k=r 的多项式g(x)
    根据g(x)可以生成k位信息的校验码,g(x)被称为 生成多项式
    用C(x)=C(k-1)C(k-2)...C0表示k个信息位
    把C(x)左移r位,就是相当于 C(x)*pow(2,r)
    给校验位空出r个位来了.

    给定一个 生成多项式g(x),可以求出一个校验位表达式r(x)
    C(x)*pow(2,r) / g(x) = q(x) + r(x)/g(x)

    用C(x)pow(2,r)去除生成多项式g(x)商为q(x)余数是r(x)
    所以有C(x)
    pow(2,r) = q(x)g(x) + r(x)
    C(x)
    pow(2,r) + r(x)就是所求的n位CRC码,由上式可以看出它是生成多项式g(x)的倍式.
    所以如果用得到的n位CRC码去除g(x)如果余数是0,就证明数据正确.
    否则可以根据余数知道 出错位 .

    在CRC运算过程中,四则运算采用 mod 2运算(后面介绍),即不考虑进位和借位.
    所以上式等价于C(x)pow(2,r) + r(x) = q(x)g(x)
    循环冗余校验码CRC(Cyclic Redundancy Code)采用一种多项式的编码方法。把要发送的数据位串看成是系数只能为“1”或为“0”的多项式。一个k位的数据块可以看成Xk-1到X0的k项多项式的系数序列。例如,“110001”有6位,表示多项式是“X5 + X4+ 1”。多项式的运算是模2运算。
    采用CRC码时,发方和收方必须事先约定一个生成多项式G(X),并且G(X)的最高位和最低必须是1。要计算m位数据块的M(X)的校验和,生成多项式必须比该多项式短。其基本思想是:将校验和附加在该数据块的末尾,使这个带校验和的多项式能被G(X)除尽。当接收方收到带校验和的数据块时,用G(X)去除它,如果有余数,则传输有错误。

  • 相关阅读:
    RobotFramework下的http接口自动化Get关键字的使用
    通过添加filter过滤器 彻底解决ajax 跨域问题
    TestLink和RedMine的集成
    SonarQube和Maven的集成
    RobotFramework下的http接口自动化Create Http Context关键字的使用
    正负数的源码 反码 补码 转
    SSM的,日常错误
    SSM的 日常错误 之 mybatis
    Eclipse无法启动报An internal error occurred during: "reload maven project". java.lang.NullPointerException
    错误异常
  • 原文地址:https://www.cnblogs.com/Wangziweia/p/13695163.html
Copyright © 2011-2022 走看看