为何__builtin_parity返回结果与硬件奇偶校验标志定义相反?
设计差异的核心原因
二者的目标使用场景、设计继承来源完全不同,具体可以分为两部分说明:
- 软件侧
__builtin_parity的设计逻辑
这个内置函数的定义完全对齐奇偶校验的通用数学规则:直接返回数值二进制位中1的数量模2的结果。奇数个1返回1、偶数个1返回0的逻辑可以直接用于常规校验计算场景,比如生成奇校验位的时候直接取返回值即可,不需要额外做取反操作,符合软件开发者的常规逻辑直觉。 - 硬件侧奇偶校验标志(PF)的设计逻辑
x86等主流架构的奇偶标志是早期8位处理器时代的遗留设计,当时硬件资源极其有限,奇偶标志主要用于ASCII码传输的偶校验场景,硬件电路实现时直接将「1的数量为偶数」的状态置为1,可以省去额外的逻辑门开销。后续架构为了保证向后兼容性,一直没有修改这个定义,才形成了和软件内置函数逻辑相反的现状。
如果需要在代码中通过__builtin_parity得到和硬件奇偶标志一致的结果,只需要对返回值取反即可:!__builtin_parity(x)。
内容的提问来源于stack exchange,提问作者PHD
相关产品推荐
相关产品推荐

