[APM32E0] 奇偶校验算法另一则

[复制链接]
53|3
水之呢喃 发表于 2025-10-21 20:19 | 显示全部楼层 |阅读模式
, 帖子,
看了坛友的帖子,我也觉得奇偶校验的作用也挺大的(原理参照原帖https://bbs.21ic.com/icview-3491168-1-1.html)。于是,我也提供一则奇偶校验算法。
我的算法是基于C语言中的异或操作。根据异或操作的原理,1^1 =0, 1^0=1。算法如下:
  1. /**
  2. * 计算32位word的奇校验位(使用异或操作优化)
  3. * @param data 32位输入数据
  4. * [url=/u/return]@return[/url] 奇校验位(1或0)
  5. */
  6. uint8_t odd_parity_word(uint32_t data) {
  7.     // 使用异或操作快速计算奇偶性
  8.     // 通过分治思想将32位数据逐步压缩到1位
  9.     data ^= data >> 16;
  10.     data ^= data >> 8;
  11.     data ^= data >> 4;
  12.     data ^= data >> 2;
  13.     data ^= data >> 1;
  14.    
  15.     // 取最低位作为奇偶性,然后转换为奇校验
  16.     // 如果data最低位为1,说明1的个数为奇数,奇校验位为0
  17.     // 如果data最低位为0,说明1的个数为偶数,奇校验位为1
  18.     return (~data) & 1;
  19. }
算法的时间复杂度也实现到了O(log n)。供大家参考。



观星者宁静 发表于 2025-10-22 09:08 | 显示全部楼层
这个算法好简单啊
霜咬回响 发表于 2025-10-22 14:35 | 显示全部楼层
厉害!见识了算法的力量
星云狂想曲 发表于 2025-10-22 16:33 | 显示全部楼层
分治算法就是牛x。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

23

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部