1.4.2 可靠性编码

代码在产生及传送的过程中难免发生错误,为减少错误的发生,或者在出错时能迅速地发现或纠正,甚至能查出错误的位置,除了要提高计算机本身的可靠性外,人们还广泛地采用了可靠性编码。目前,常用的可靠性编码有格雷(Gray)码和奇偶校验码。

1.格雷码

格雷码是一种无权循环码,其特点是相邻的两个代码(包括首、尾两个代码)仅有一位不同。另外,格雷码还具有反射特性,为镜像码。n位格雷码的前、后2n-1位码字除首位不同(前2n-1位码字首位为0,后2n-1位码字首位为1),后面各位互为镜像,即以最高位的0和1之间的交界为反射对称轴,上、下对称位置的其余位是相同的。利用这一特点,可以方便地构成位数不同的格雷码,如图1-9所示。这个特点使它在代码的形成与传输时引起的误差比较小。因此,按这种码型接成计数器时,每次状态转换过程中只有一个触发器翻转,译码时不会发生竞争-冒险现象。

格雷码常用于模拟量的转换中。当模拟量发生微小变化而可能引起数字量发生变化时,格雷码仅改变1位,这样与其他码同时改变两位或多位的情况相比更为可靠,可减少出错的可能性,因此在通信和测量中得到了广泛的应用。

2.奇偶校验码

二进制信息在传送时,可能因外界干扰或其他原因而发生错误,代码在传输过程中可能会发生“0”错成“1”,或者“1”错成“0”的差错,奇偶校验码(Parity Check Code)是一种具有检错能力、可以检测代码在传送过程中是否出现一位错误的可靠性编码。奇偶校验码由两部分组成:一部分是信息位,即需要传递的信息本身,可以是位数不限的任何一种二进制码;另一部分是奇偶校验位,仅有一位,可以添加在信息位的前面或后面。在编码时,需根据信息位中1的个数决定添加的奇偶校验位是1还是0。一般有下列两种方式:“奇校验”时,使信息位和校验位所组成的每组代码中含有奇数个1;“偶校验”时,使信息位和校验位所组成的每组代码中含有偶数个1。通常采用奇校验,因为它排除了全0的情况。由4位信息位及1位奇偶校验位构成的5位奇偶校验码见表1-6。

图1-9 格雷码

表1-6 十进制数码的奇偶校验码

这种编码的特点是每一个代码中含有1的个数总是奇(偶)数个。这样,一旦某代码在传送过程中出现1的个数不是奇(偶)数时,就会被发现。例如,当采用偶校验时,若收到的代码中含有奇数个1,则说明发生了错误。但判断出错后,并不能确定是哪一位出错,也就无法纠正。因此,奇偶检验码只有检错能力,没有纠错能力。其次,奇偶校验码只能发现单个错误,不能发现双错(即两位同时出错的情况)。但由于数据传送中出现单错的概率远远高于双错,因此,奇偶校验码还是很有实用价值的。加之它编码简单、容易实现,因而在数字系统中被广泛采用。