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

汉明码发送端奇偶位生成不符规则问题排查咨询

汉明码奇偶校验代码问题分析

问题描述

输入长度为4的数据串1、0、1、0时,代码生成的奇偶位为P1=1、P2=0、P4=1,但预期按需求的奇偶校验规则应得到P1=0、P2=1、P4=0,代码输出与预期不符。

代码问题分析

1. 奇偶校验逻辑与预期不匹配

代码当前实现的是偶数奇偶校验:通过temp[t] = sum%2;设置校验位,确保校验组内1的总数为偶数。但你的预期结果对应的是奇数奇偶校验(要求校验组内1的总数为奇数)。

要匹配预期结果,需将校验位计算逻辑修改为:

temp[t] = 1 - (sum % 2);

修改后:

  • 当校验组内1的总数为奇数时,sum%2=1,校验位设为0,使总数保持奇数;
  • 当校验组内1的总数为偶数时,sum%2=0,校验位设为1,使总数变为奇数。

2. 浮点数幂函数存在精度风险

代码使用pow(2,k)计算2的整数次幂,这是浮点数运算,当k较大时可能出现精度误差(如pow(2,10)可能返回1023.999999,强制转换为int后变为1023),导致校验位位置计算错误。

应改用整数位运算替代:

t = (1 << k) - 1;

位运算1 << k等价于计算2^k,结果为整数,无精度问题。

3. 固定maxp值限制扩展性

代码中maxp=6是固定值,当数据长度超过一定范围时,无法正确插入所有校验位。应动态计算所需校验位数量n,满足公式:

2^n >= nd + n + 1

其中nd是数据长度,n是校验位数量。

4. main函数返回类型不符合C标准

C标准要求main函数返回int类型,当前void main()不符合规范,应修改为:

int main() {
    // 原有代码
    return 0;
}

修改后验证

修改奇偶校验逻辑和pow调用后,输入数据1、0、1、0:

  • P1校验组内1的总数为1(奇数),校验位设为0;
  • P2校验组内1的总数为2(偶数),校验位设为1;
  • P4校验组内1的总数为1(奇数),校验位设为0;
    完全匹配预期结果。

内容的提问来源于stack exchange,提问作者Encipher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:44:50