预习非数值数据的编码方式

非数值数据

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

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

正常情况下,每个字或其他可寻址单位是作为一个整体数据单元看待的,但是有时候需要将一个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)去除它,如果有余数,则传输有错误。

原文地址:https://www.cnblogs.com/Wangziweia/p/13695163.html