0

0

格雷码的十进制等价及其逆序

WBOY

WBOY

发布时间:2023-09-07 18:33:02

|

2832人浏览过

|

来源于tutorialspoint

转载

格雷码的十进制等价及其逆序

格雷码或反射二进制码是一种数字二进制表示形式,其中两个连续数字仅相差一位。

例如1的格雷码是001,2的格雷码是011。

格雷码通常用于纠错,因为它可以防止在状态更改时通常的二进制表示中可能发生的一些数据错误。

由于其独特的属性,格雷码在 k-map、通信等方面也很有帮助。

先决条件

在进一步阅读之前,请先研究十进制、二进制和格雷码符号。

问题陈述 1

给定一个十进制数 n,求该数的十进制形式的格雷码。

示例

Input: 3
Output: 2

说明 -> 3 的二进制表示为 011。其格雷码表示为 010。010 的十进制表示为 2。

因此,3 的格雷码的十进制等效值为 2。

Input: 5
Output: 7

说明 -> 5 的二进制表示形式为 101。其格雷码表示形式为 111,其十进制表示形式为 7。

因此,5 的格雷码的十进制等效值为 7。

解决方案

编译器理解二进制格式的数字。

因此,在我们的程序中,当我们输入十进制格式的数字时,它会被解释为二进制。

因此,我们只需要将数字从其二进制等价物转换为其格雷码即可。

二进制到格雷码转换

二进制表示和格雷码的最左边的位是相等的。通过对连续的二进制位进行异或运算可以找到右侧的以下位。

例如 -

考虑n = 3。3的二进制代码是011。

  • 二进制码和格雷码的最左边位相等。因此,格雷码中从左起第一位就是0。

  • 对于左起第二位,将二进制代码中左起第一位和第二位进行异或。 0 异或 1 = 1。

  • 对于左起第三位,将二进制代码中左起第二位和第三位进行异或。 1 异或 1 = 0。

因此格雷码:010。

Remover
Remover

几秒钟去除图中不需要的元素

下载

算法:使用按位运算符

我们可以通过以下步骤获取数字n的格雷码 -

  • n 右移 1。

  • 将右移后的数字与原始 n 进行异或。

示例

下面是一个使用按位运算符从二进制代码中查找格雷码的 C++ 程序

#include 
using namespace std;
//This function returns the decimal equivalent
// of the gray code of n.
int dec_equi_of_gray(int n) {
   return n ^ (n >> 1);
}
int main(){
   int n = 3;
   cout<<"The decimal equivalent of the gray code of 3 is: ";
   
   //Function call to convert binary code to gray code
   cout << dec_equi_of_gray(n) << endl;
   return 0;
}

输出

The decimal equivalent of the gray code of 3 is: 2

问题陈述 2

给定格雷码的十进制值,求其十进制码值。

示例

Input: 15
Output: 10

解释 -> 作为输入给出的格雷码:1111(二进制值 15)。

现在,将格雷码转换为二进制码,从 1111 得到 1010。

1010 是 10 的二进制值。因此,输出。

Input: 10
Output: 12

解释 -> 作为输入给出的格雷码:1010(二进制值 10)。

格雷码1010的二进制为1100。1100的十进制为12。

格雷码到二进制码的转换

二进制码的最左边位(MSB)与格雷码的MSB相同。通过将前一个索引二进制位与当前索引灰度位进行异或,可以找到以下位。

例如:考虑格雷码 1111。

  • 二进制码的 MSB 将与格雷码的 MSB 相同。因此,MSB 将为 1。

  • 对于左二位,检查格雷码左二位与二进制码最左位的异或。因此,1 ^ 1 = 0。

  • 同样,对于最左边的第三位,0 ^ 1 = 1。

  • 对于最左第四位,1 ^ 1 = 0。

因此二进制代码:1010。

示例

下面是一个 C++ 程序,用于使用按位运算符从格雷码中查找二进制代码

#include 
using namespace std;

//This function returns the decimal value of 
//the binary code converted from the gray code n.
int gray_to_binary(int n){
   int binary = n;
   while (n > 0){
      n >>= 1;
      binary ^= n;
   }
   return binary;
}
// Driver Code
int main(){
   int n = 15;
   cout<<"The decimal value of the binary code converted from the gray code is: ";
   
   // Function call to convert gray code to binary code
   cout << gray_to_binary(n) << endl;
   
   return 0;
}

输出

The decimal value of the binary code converted from the gray code is: 10

结论

本文解决了寻找给定数字 n 的格雷码十进制等价及其逆的问题。我们使用按位运算符解决了这个问题。针对问题的两个部分都提供了 C++ 程序。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

85

2025.10.17

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

37

2025.11.27

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

402

2023.08.14

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
麻省理工大佬Python课程
麻省理工大佬Python课程

共34课时 | 5.1万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号