格雷码的产生方式以及其与二进制码的关系

格雷码也是一种可以用来计数的编码方式,它在加1的过程中只有一位发生变化,这样就可以简化硬件实现,因此许多速度传感器,绝对位置传感器等会采用格雷码计数。 此外由于给雷码的特性,一次变化过程只改变一位,相比普通二进制计数,加1后可能变化多位,更加安全。因此在数字电路的状态机的状态计数采用格雷更加安全,且易于实现。

格雷码可以按照如下方式产生

0  取镜像 0 加符号  00   取镜像  00   加符号 000  。。。。。

1              1              01               01               001

---            ------

1              11               11               011

0              10               10               010

---------         --------

10              110

11              111

01              101

00              100

格雷码与二进制码的关系

某二进制数为 BnBn-1Bn-2.....B1B0

某格雷码为    GnGn-1Gn-2.....G1G0

二进制到格雷码:

最高位:

Gn=Bn

其它位 Gi=(Bi+1)^(Bi);

格雷码到二进制:

最高位:

Bn=Gn

其它位 Bi=(Bi+1)^(Gi);

格雷码的产生方式以及其与二进制码的关系

时间: 2024-10-08 10:28:09

格雷码的产生方式以及其与二进制码的关系的相关文章

连环锁 格雷码知识+大数

连环锁 题目抽象:某个格雷码到另一个格雷码最少需要的转换步数. 思路:直接求出对应得十进制,相减取绝对值. 当n=2时变换的序列为00,01,11,10 当n=3时变换的序列为000,001,011,010,110,111,101,100 …… 仔细观察发现这正是格雷码,相邻两个状态只有一位不同(实际上题目描述已经说了这个条件)! 十进制数 自然二进制数 格雷码 0 0000 0000 1 0001 0001 2 0010 0011 3 0011 0010 4 0100 0110 5 0101

格雷码的实现

问题:产生n位元的所有格雷码. 格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同. 例如以下为3位元的格雷码: 000 001 011 010 110 111 101 100 . 如果要产生n位元的格雷码,那么格雷码的个数为2^n. 假设原始的值从0开始,格雷码产生的规律是:第一步,改变最右边的位元值:第二步,改变右起第一个为1的位元的左边位元:第三步,第四步重复第一步和第二步,直到所有的格雷码产生完毕(换句话说,已

生成格雷码 转自leetcode

在一组数的编码中,若两个相邻的代码中只有一个二进制数不同,则称这种编码为格雷码. 下面尝试使用递归的方法来生成格雷码 vector<int> GrayCode(int n){//n表示格雷码的位数 if(n==0) return vector<int>(1)//返回只有一个0的容器 vector<int> res=GrayCode(n-1);//采用递归方法 for(int i=res.size()-1 ; i >=0 ;i-- )//采用从后往前的方式 res.

我的 FPGA 学习历程(06)&mdash;&mdash; 二进制转格雷码

格雷码是一种无权码,它的特点是相邻的两数之间只有一个位不同,像这样:         000-->001-->011-->010-->110-->111-->101-->100 而二进制码是这样的:         000-->001-->010-->011-->100-->101-->110-->111         显然格雷码的顺序显然不是唯一的,而且格雷码十分不便于阅读,但它有它的优点:对比使用二进制编码的逻辑电路

算法学习 - Gray Code(格雷码)的解释和c++实现

Gray Code(格雷码) 典型的二进制格雷码(Binary Gray Code)简称格雷码.当初是为了通信,现在则常用于模拟-数字转换和位置-数字转换中. 特点是:一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码. 格雷码属于可靠性编码,是一种错误最小化的编码方式. 格雷码是一种绝对编码方式. 由于格雷码是一种变权码. 格雷码的十进制数奇偶性与其码字中1的个数的奇偶性相同. 十进制转换为格雷码 好的上面我们已经介绍那么多了,那么我来说下如何把一个十进制的数字转换

格雷码那点事——递归非递归实现

简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码.在数字系统中,常要求代码按一定顺序变化.例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100.1111等).在特定情况下可能导致电路状态错误或输入错误.使用格雷码可以避免这种错误.格雷码有多种

格雷码与二进制码的转换

Gray Code是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码,是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环.单步特性消除了随机取数时出现重大误差的可能,它的反射.自补特性使得求反非常方便.格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲.而格雷码则没有这一缺

[C++]LeetCode: 86 Gray Code (格雷码)

题目: The gray code is a binary numeral system where two successive values differ in only one bit. Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0

原码、反码、补码、BCD码、格雷码

二进制的最高位表示这个二进制的正负符号(0为正,1为负),其余各位数表示其数值本身称为原码. 正数的反码等于原码,负数的反码是在原码的基础上,符号位不变,其余各位取反. 正数的补码等于原码,负数的补码是在原码的基础上,符号位不变,其余各位取反,最后加一. DCB码:用4位二进制数来表示1位十进制中的0~9这10个数,简称BCD码. 格雷码(又叫循环二进制码或反射二进制码):是一种无权码,采用绝对编码方式,属于可靠性编码,是一种错误最小化的编码方式. 应用: 单片机内部数据存储器RAM中,整数不论