格雷码或反射二进制码是一种数字二进制表示形式,其中两个连续数字仅相差一位。
例如1的格雷码是001,2的格雷码是011。
格雷码通常用于纠错,因为它可以防止在状态更改时通常的二进制表示中可能发生的一些数据错误。
由于其独特的属性,格雷码在 k-map、通信等方面也很有帮助。
先决条件
在进一步阅读之前,请先研究十进制、二进制和格雷码符号。
问题陈述 1
给定一个十进制数 n,求该数的十进制形式的格雷码。
示例
Input: 3Output: 2
登录后复制
说明 -> 3 的二进制表示为 011。其格雷码表示为 010。010 的十进制表示为 2。
因此,3 的格雷码的十进制等效值为 2。
Input: 5Output: 7
登录后复制
说明 -> 5 的二进制表示形式为 101。其格雷码表示形式为 111,其十进制表示形式为 7。
因此,5 的格雷码的十进制等效值为 7。
解决方案
编译器理解二进制格式的数字。
因此,在我们的程序中,当我们输入十进制格式的数字时,它会被解释为二进制。
因此,我们只需要将数字从其二进制等价物转换为其格雷码即可。
二进制到格雷码转换
二进制表示和格雷码的最左边的位是相等的。通过对连续的二进制位进行异或运算可以找到右侧的以下位。
例如 –
考虑n = 3。3的二进制代码是011。
二进制码和格雷码的最左边位相等。因此,格雷码中从左起第一位就是0。
对于左起第二位,将二进制代码中左起第一位和第二位进行异或。 0 异或 1 = 1。
对于左起第三位,将二进制代码中左起第二位和第三位进行异或。 1 异或 1 = 0。
因此格雷码:010。
算法:使用按位运算符
我们可以通过以下步骤获取数字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: 2登录后复制
问题陈述 2
给定格雷码的十进制值,求其十进制码值。
示例
Input: 15Output: 10登录后复制
解释 -> 作为输入给出的格雷码:1111(二进制值 15)。
现在,将格雷码转换为二进制码,从 1111 得到 1010。
1010 是 10 的二进制值。因此,输出。
Input: 10Output: 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 Codeint main(){ int n = 15; cout输出
The decimal value of the binary code converted from the gray code is: 10登录后复制
结论
本文解决了寻找给定数字 n 的格雷码十进制等价及其逆的问题。我们使用按位运算符解决了这个问题。针对问题的两个部分都提供了 C++ 程序。
以上就是格雷码的十进制等价及其逆序的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2583110.html