我们所看见理解的信息包括数值、文字、符号、语音和图形、图像等。 在计算机内部,这些内容都必须用数字化的形式被存储、加工和传送,不同信息要通过编码来表示。

什么是编码

用少量简单的基本符号最常见的就是0和1,对大量复杂多样信息进行一定规律的组合表示。

编码的两个要素:少量简单的基本符号、一定的组合规则

数值数据编码需解决的就是1、数的大小:采用什么进位计数制 ;2、数的符号表示:原码、补码、反码 ;3、小数点的表示:定点、浮点

进位计数法

一进制:一个就是一个

二进制:0,1 逢2进1,2用10表示,10用1010表示

四进制:0,1,2,3,逢4进1,4用10表示,10用22表示

八进制:0,1,2,3,4,5,6,7逢8进1,8用10表示,10用12

十进制:0,1,2,3,4,5,6,7,8,9,逢10进1,10用10表示

十六进制:数字不够字母来凑0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F逢16进1,16用10表示,10用A表示

基数:每个数位所用到的不同符号的个数

相互转换


access 三位计数_码字


access 三位计数_access两位小数不进位_02


access 三位计数_校验码_03


access 三位计数_数据_04


access 三位计数_校验码_05


BCD码(Binary Coded Decimal‎)

一种二进制的数字编码形式,它是用二进制编码的十进制代码。这种编码形式利用四个位来储存一个十进制数,使得二进制和十进制之间的转换得以快捷地进行。常见的BCD编码有8421BCD码,2421BCD码和余3码,其中又以8421BCD码最为常见。

8421BCD码中的“8421”表示从高到低各位二进制位对应的权值分别为8、4、2、1,将各二进制位与权值相乘,并将乘积相加就得相应的十进制数。例如,8421BCD码“0111”,0×8+1×4+1×2+1×1=7D,其中D表示十进制(Decimal)数。值得特别注意的是,8421BCD码只有0000~1001共十个,而1010、1011...等等不是8421BCD码!


access 三位计数_access两位小数不进位_06

BCD码加法运算的修正规则:如果两个一位BCD码相加之和小于或等于9,不需要修正; 如相加之和大于9或产生进位,要进行加6修正,如果有进位,要向高位进位。 • BCD码有多种不同的编码方案 • 可以进一步分为有权码和无权码: • 有权码:每位上的 1 代表确定的值 • 无权码:无法确定每位上的 1 代表的值

余三码是在8421BCD码的基础上,把每个数的代码加上0011(对应十进制数3)后得到的。


access 三位计数_校验码_07


access 三位计数_码字_08


ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)

是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。


access 三位计数_码字_09


汉字码


access 三位计数_码字_10


为什么要有校验码?

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

.数据是如何校验的?


access 三位计数_数据_11

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

码距

那么,码距有什么用呢?答案是码距和这种类型的码的检错,纠错能力有关。

若干位代码组成的一个字称为码字,而两个码字具有不同代码的位数为这两个码字的距离,而码制里各种码字间最小的距离称为码距。

比如8421码,1001和0000,有两位不同,所以距离是2,而0010和0011的距离为1,是最小的距离,故8421码码距为1。如8421码,由于码距是1,无检错,纠错能力,比如数据0000,如果其中一位变化,变成0001,那么,这个数据仍然是合法的。

再如奇偶校验码中奇校验码,如100000000和010000000,码距为2,我们可以发现,如果数据中有一位变化了,如100000000变为110000000,我们可以很容易地判断出数据出错了,因为110000000不符合奇校验的编码(校验位和数据位一起所含1的个数为奇数)

我们可以发现,校验码可以帮助扩大码距,从而找出错误。

码距与检错、纠错能力的关系(当d≤4)

若码距d为奇数,则能发现d-1位错,或能纠正(d-1)/2位错。

若码距d为偶数,则能发现d/2位错,并能纠正(d/2-1)位错。

奇偶校验码

1.编码方式

无论数据位多少位,校验位只有一位

数据位和校验位一共所含的1个数为奇数,称为奇校验

数据位和校验位一共所含的1个数为偶数,称为偶校验

例如(加粗为校验位):

数据 奇校验的编码 偶校验的编码

00000000 100000000 000000000

01010100 001010100 101010100

01111111 001111111 101111111

由于数据传输过程一般是出现一位错误,而奇偶校验码能发现奇数个错误,所以奇偶校验的实用价值还是很高的。

2.实现原理

那么,奇偶校验是怎么来发现错误的呢?根据二.数据是如何校验的我们可以知道,在数据传输之前,我们会求一次校验位,传输后,会求一次校验位,那么,在奇偶校验中,我们通过比较这两个校验位是否相同,一般是采用异或的方式,若结果为1,则说明有奇数个错误,结果为0,则说明正确或者偶数个错误。