基本概念

格雷码是一种准权码,具有一种反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式。

自然二进制码可以直接由数/模转换器转换成模拟信号,但是在某些情况下,例如从十进制的3转换到4的二进制时,每一位都要变。3的二进制位:,而4的二进制位:100,所以这就会使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个位不同,故通常又叫格雷反射码或循环码。

二进制和格雷码的转换

二进制码编码成格雷码的准则:从二进制码的最右一位起,依次将每一位与左边一位异或(XOR)运算,其结果作为对应位格雷码的值,最左位不变。

设有 N 位二进制数 B(i),其中 0 <= i <= N - 1;它可以变换成为同样位数的格雷码 G(i)。
二进制数与格雷码的转换公式如下:

  G(i) = B(i+) XOR B(i);  <= i < N -
  G(i) = B(i); i = N -

格雷码解码成二进制码的准则:从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。

设有 N 位格雷码 G(i),把它转换成自然二进制数的算法如下。

自然二进制码的最高位等于雷码的最高位;
自然二进制码的次高位为最高位自然二进制码与次高位格雷码相异或;
自然二进制码的其余各位与次高位自然二进制码的求法相类似。
转换公式如下:

  B(i) = G(i);      i = N -
  B(i) = B(i+) XOR G(i); <= i < N -

下表给出了二进制码与格雷码的对应关系,十进制数用4为二进制码表示。

十进制数 二进制数 格雷码

位运算符

&       与运算 
      |       或运算 
      ^       异或运算 
      ~       非运算(求补) 
    > >       右移运算 
    < <       左移运算

下面代码会用到异或运算符。

C++实现二进制码编码成格雷码

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std; #define MAX 1000 int BCD[MAX];
int GRAYCODE[MAX];
int temp[MAX];
//BCD码转换成格雷码
void bcdToGraycode(int bcd[], int gray[], int rightIndex)
{
if (rightIndex == )
{
gray[rightIndex] = bcd[rightIndex];
return;
}
else
{
gray[rightIndex] = bcd[rightIndex] ^ bcd[rightIndex - ];
bcdToGraycode(bcd, gray, rightIndex - );
}
} int main()
{
int number;
//二进制数组长度
int index = ;
int len;
int m = ;
int t;
//输入一个十进制数
cin >> number;
//转换成二进制数
while (number)
{
temp[index++] = number % ;
number = number >> ;
}
//按照标准格式输出,位数为2的整数次幂
while ()
{
t = pow(, m);
if (index <= t)
{
len = t - ;
break;
}
else
{
m++;
}
} for (int i = ; i <= len; i++)
{
BCD[i] = ;
}
t = index - ;
for (int i = ; i < index; i++)
BCD[len - index + + i] = temp[t--];
bcdToGraycode(BCD, GRAYCODE, len);
for (int i = ; i <= len; i++)
cout << GRAYCODE[i] << ' ';
return ;
}

Gray Code - 格雷码的更多相关文章

  1. [LeetCode] Gray Code 格雷码

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  2. gray code 格雷码 递归

    格雷码 the n-1 bit code, with 0 prepended to each word, followd by the n-1 bit code in reverse order, w ...

  3. [LeetCode] 89. Gray Code 格雷码

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  4. [LintCode] Gray Code 格雷码

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  5. HDU 5375 Gray code 格雷码(水题)

    题意:给一个二进制数(包含3种符号:'0'  '1'  '?'  ,问号可随意 ),要求将其转成格雷码,给一个序列a,若转成的格雷码第i位为1,则得分+a[i].求填充问号使得得分最多. 思路:如果了 ...

  6. 089 Gray Code 格雷编码

    格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异.给定一个代表编码总位数的非负整数 n,打印格雷码序列.格雷码序列必须以0开头.例如, 给定 n = 2, 返回 [0,1,3 ...

  7. Leetcode89. Gray Code格雷编码

    给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 示例 1: 输入: 2 输出: [0,1,3,2] 解释: 00 - 0 01 - 1 11 - 3 10 - ...

  8. LeetCode:Gray Code(格雷码)

    题目链接 The gray code is a binary numeral system where two successive values differ in only one bit. Gi ...

  9. 格雷码(Gray code)仿真

    作者:桂. 时间:2018-05-12  16:25:02 链接:http://www.cnblogs.com/xingshansi/p/9029081.html 前言 FIFO中的计数用的是格雷码, ...

随机推荐

  1. servlet中 getRealPath deprecated(被废弃)

    servlet中, HttpRequestServlent req;  req.getRealPath 被废弃,使用this.getServletContext().getRealPath()替代:

  2. 安装ELK

    1. 安装Elasticsearch a. 下载 : https://download.elasticsearch.org/elasticsearch/release/org/elasticsearc ...

  3. 显示vim当前颜色主题

    在vim内,查看colors_name :echo g:colors_name 如果值为空,那么默认为:default主题

  4. Linux下C语言使用openssl库进行加密

    在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...

  5. linux 2.6.xx自动加载kvm模块

    在文件夹/etc/udev/rules.d/中添加文件65-kvm.rules,文件内容如下: KERNEL=="kvm", MODE="0660", GROU ...

  6. Ubantu MySQL数据库操作

    用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PASSW ...

  7. TCP/IP协议分析

    一;前言 学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了.本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体 ...

  8. Spring教程索引

    Spring教程索引 2016-11-15 1 入门 1 概述.深入浅出Spring(一)Spring概述 2 体系结构 3 环境设置 4 Hello World 实例 5 IoC 容器   IoC容 ...

  9. SharePoint API测试系列——Manage SharePoint Site Policy & Expiration Email with CSOM API

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对CSOM(Not SSOM) Site Policy & Expiration Emai ...

  10. zookeeper原生API做java客户端

    简介 本文是使用apache提供的原生api做zookeeper客户端 jar包 zookeeper-3.4.5.jar   Demo package bjsxt.zookeeper.base; im ...