【发布时间】:2021-12-04 10:40:53
【问题描述】:
GCC 和 Clang 都支持名为 __builtin_parity 的实现定义函数,该函数有助于确定数字的奇偶性。
内置函数:int __builtin_parity (unsigned int x)
返回 x 的奇偶校验,即 x 模 2 中的 1 位数。
这意味着如果 1 的位数是偶数,它会返回 0,如果是奇数则返回 1。
我在 Compiler Explorer 上测试的 Clang 也是如此。
但是,实际的parity flag是在设置位数为偶数时设置的。
为什么会这样?
【问题讨论】:
-
@NateEldredge 这确实有道理,因为如今奇偶校验标志已过时。我仍然不明白为什么函数以相反的方式执行
-
仅供参考,当向一个数字添加奇偶校验位时,奇偶校验位最好是奇数位的偶数位,因为这意味着没有结果将所有位都关闭(如果数字为零,奇偶校验位将被设置)。因此,当您的纸带阅读器正在扫描您的纸带时,它可以依赖于每行磁带中始终至少有一个孔。它可能会使用它来帮助在磁带移动或检测错误时保持时间同步。 (我不明白为什么会实施
__builtin_parity来扭转这种传统意义。)