格雷码(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. |
### ### |