二进制转换格雷码
在书上看到二进制转换格雷码的方法,一开始看不懂,就去百度上搜索,结果篇没有找到介绍书上用的那个方法的文章。后来自己看懂了于是写这篇博客。
奇校验与偶校验
数据在传输的过程中可能会出现错误,所以通常在二进制编码中额外加上一个校验位(parity bit),用于示编码中1的个数是奇数还是偶数。主要有奇校验与偶校验两种方法。一般应用中只需要采用奇偶校验中的一种,偶校验用得更广泛。
偶校验
对于偶校验(even parity)来说,当字符编码中1的个数为偶数时校验位为0。
100 0001
其中有两个1所以校验位为0
所以编码为0100 0001
101 0100
其中有了个1所以校验位为1
所以编码为1101 0100
奇校验
对于奇校验(odd parity)来说,当字符编码中1的个数为奇数时,校验位为0。
100 0001
其中有两个1,为偶数个,所以校验位为1
所以编码为1100 0001
101 0100
其中有三个1,为奇数个,所以校验位为0
所以编码为0101 0100
格雷码
对于n(n必须为偶数)位二进制表示的计数序列来说,首先对前n/2个二进制进行编码,设目的格雷码的左边最高位为0,然后往右的各位由原二进制编码的每一位与它左边相邻位的偶校验构成。接着,将已构成的格雷码序列按逆序排列,并将左边最高位设为1,这样就构成了原序列中的后n/2个二进制编码所对应的格雷码序列。
以BCD码为例:
首先对前5个二进制编码
以0100为例:
设左边最高位为0, 0100中的第2位数字1与0构成二进制码01,有1个1,为奇数个,所以偶校验为1,所以格雷码第二位为1。
同理,0100中的第2位数字1与第3位数字0构成二进制编码10,其偶校验为1。
0100中第3数字0与第4位数字0构成二进制编码00,其偶校验为0。
所以0100的格雷码为0110
用这种方法就可得前5个格雷码为0000、0001、0011、0010和0110
将前5个格雷码逆序排列
可得0110、0010、0011、0001、0000
将左边最高位设为1
即可得到后5个格雷码为1110、1010、1011、1001、1000
参考书目:《逻辑与计算机设计基础》