You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:45:17