概况页面
 
格雷码
 
参加工夫:2012-08-09
 
 
格雷码(Gray code),又叫循环二进制码反射二进制码
    数字体系中只能辨认0和1,种种数据要转换为二进制代码才干举行处置,格雷码是一种无权码,接纳相对编码方法,典范格雷码是一种具有反射特征和循环特征的单步自补码,它的循环、单步特征消弭了随机取数时呈现严重偏差的大概,它的反射、自补特征使得求反十分利便。格雷码属于牢靠性编码,是一种错误最小化的编码方法,由于,天然二进制码可以间接由数/模转换器转换成模仿信号,但某些状况,比方从十进制的3转换成4时二进制码的每一位都要变,使数字电路发生很大的尖峰电流脉冲。而格雷码则没有这一缺陷,它是一种数字排序体系,此中的一切相邻整数在它们的数字表现中只要一个数字差别。它在恣意两个相邻的数之间转换时,只要一个数位产生变革。它大大地增加了由一个形态到下一个形态时逻辑的殽杂。别的由于最大数与最小数之间也仅一个数差别,故通常又叫格雷反射码循环码。下表为几种天然二进制码与格雷码的对>###      
十进制数 天然二进制数 格雷码
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000
一样平常的,平凡二进制码与格雷码可以按以下办法相互转换
二进制码->格雷码(编码):从最左边一位起,顺次将每一位与右边一位异或(XOR),作为对应格雷码该位的值,最右边一位稳定(相称于右边是0); 格雷码-〉二进制码(解码):从右边第二位起,将每位与右边一位解码后的值异或,作为该位解码后的值(最右边一位仍然稳定).
数学(盘算机)>###   

原码:p[0~n];格雷码:c[0~n](n∈N);编码:c=G(p);解码:p=F(c);誊写时从左向右标号顺次减小.
   编码:c=p XOR p[i+1](i∈N,0≤i≤n-1),c[n]=p[n];
   解码:p[n]=c[n],p=c XOR p[i+1](i∈N,0≤i≤n-1).
   Gray Code是由贝尔实行室的Frank Gray在20世纪40年月提出的(是1880年由法国工程师Jean-Maurice-Emlle Baudot创造的),用来在利用PCM(Pusle Code Modulation)办法传送讯号时制止堕落,并于1953年3月17日获得美国专利。由界说可知,Gray Code的编码方法不是独一的,这里讨论的是最常用的一种。
   格雷码
   (英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle Baudot创造的一种编码,是一种相对编码方法,典范格雷码是一种具有反射特征和循环特征的单步自补码,它的循环、单步特征消弭了随机取数时呈现严重偏差的大概,它的反射、自补特征使得求反十分利便。格雷码属于牢靠性编码,是一种错误最小化的编码方法,由于,固然天然二进制码可以间接由数/模转换器转换成模仿信号,但在某些状况,比方从十进制的3转换为4时二进制码的每一位都要变,能使数字电路发生很大的尖峰电流脉冲。而格雷码则没有这一缺陷,它在相邻位间转换时,只要一位发生变革。它大大地增加了由一个形态到下一个形态时逻辑的殽杂。由于这种编码相邻的两个码组之间只要一位差别,因此在用于风向的转角位移量-数字量的转换中,当风向的转角位移量产生巨大变革(而大概惹起数字量产生变革时,格雷码仅改动一位,如许与别的编码同时改动两位或多位的状况相比更为牢靠,即可增加堕落的大概性。
   但格雷码不是权重码,每一位码没有确定的巨细,不克不及间接举行比力巨细和算术运算,也不克不及间接转换成液位信号,要颠末一次码变更,酿成天然二进制码,再由上位机读取。解码的办法是用‘0’和收罗来的4位格雷码的最高位(第4位)异或,后果保存到4位,再将异或的值和下一位(第3位)相异或,后果保存到3位,再将相异或的值和下一位(第2位)异或,后果保存到2位,顺次异或,直到最低位,顺次异或转换后的值(二进制数)便是格雷码转换后天然码的值.
   异或:异或则是按位“异或”,相反为“0”,相异为“1”。例:
   10011000 异或 01100001 后果: 11111001

举例:
假如收罗器器采到了格雷码:1010
就要将它变为天然二进制:
0 与第四位 1 举行异或后果为 1

下面后果1与第三位0异或后果为 1

面后果1与第二位1异或后果为 0

下面后果0与第一位0异或后果为 0

因而终极后果为:1100 这便是二进制码即十进制 12

固然人看时只需比较表1一下子就晓得是12

雷码解码的Pascal 步伐:

var x,y,i:longint;

begin

    readln(x);

    for i:= 30 downto 0 do

    begin

        y:=(x and (1 shl i )) xor (( x and (1 shl(i+1))) shr 1);

        x:=x and not (1 shl i ) or y;

    end;

    writeln(x);

end.

###

 

###