如何用C语言与Python3实现Gray码到二进制码的转换?
格雷码转二进制的C语言与Python3实现
格雷码转二进制的核心规则:
- 二进制的最高位与格雷码的最高位完全相同
- 从高位到低位,每一位二进制位 = 前一位二进制位 异或 当前格雷码位
C语言实现
字符串形式格雷码转换
适用于处理字符串格式的格雷码,直接输出对应二进制字符串:
#include <stdio.h> #include <string.h> void gray_to_binary(const char *gray, char *binary) { int len = strlen(gray); binary[0] = gray[0]; // 最高位保持一致 for (int i = 1; i < len; i++) { // 异或逻辑:相同为'0',不同为'1' binary[i] = (binary[i-1] == gray[i]) ? '0' : '1'; } binary[len] = '\0'; // 字符串结束符 } int main() { const char *gray_samples[] = {"0000", "0001", "0011", "0010", "0110", "0111"}; char binary_buf[5]; // 4位格雷码+结束符,共5个字符空间 printf("Grey->Binary\n"); for (int i = 0; i < 6; i++) { gray_to_binary(gray_samples[i], binary_buf); printf("%s->%s\n", gray_samples[i], binary_buf); } return 0; }
运行后会输出用户提供的所有转换示例结果。
整数形式格雷码转换
如果格雷码以整数形式存储,可通过位运算高效转换:
unsigned int gray_to_binary_int(unsigned int gray) { unsigned int binary = gray; while (gray >>= 1) { binary ^= gray; } return binary; }
比如输入0b0111(十进制7),返回0b0101(十进制5),符合示例转换结果。
Python3实现
字符串形式格雷码转换
直接处理字符串输入,返回对应二进制字符串:
def gray_to_binary(gray_str): binary = [gray_str[0]] for i in range(1, len(gray_str)): # 异或判断:相同则为'0',不同则为'1' next_bit = '0' if binary[-1] == gray_str[i] else '1' binary.append(next_bit) return ''.join(binary) # 测试用户提供的示例 gray_samples = ["0000", "0001", "0011", "0010", "0110", "0111"] print("Grey->Binary") for gray in gray_samples: print(f"{gray}->{gray_to_binary(gray)}")
整数形式格雷码转换
利用Python的位运算快速转换:
def gray_to_binary_int(gray): binary = gray while gray >>= 1: binary ^= gray return binary # 测试示例:0111对应整数7,转换后为5(二进制0101) print(bin(gray_to_binary_int(0b0111))) # 输出 0b101,对应0101
内容的提问来源于stack exchange,提问作者Jalil Kowsarian
相关产品推荐
相关产品推荐

