【发布时间】:2014-07-05 06:26:54
【问题描述】:
我有兴趣找到一个布尔/算术函数,如果两个值匹配,它将返回 -1,如果它们不匹配,则返回 0,即 == 操作。我知道这可以用逻辑非来完成,例如:
! (A-B)
如果 A == B,它将是 -1(= 111111111.... 在二进制中)。但问题是这会编译为大的右移,例如 >> 31,这是昂贵的。我希望找到可以达到相同效果的短周期二进制指令。
== 用作 R 值时如何编译,与 !(A-B) 相同?
【问题讨论】:
-
取决于编译器和目标架构
-
关于@PaulBeusterien 的评论,Is bit shifting O(1) or O(n)?。
-
最终你必须做一个比较才能使这个结果有用,最简单的就是异或,要么为零,要么不为零,而对于C,这就是你所需要的,零或非零.你可以做一系列的转变和 ors 把非零变成所有的,但正如在某些时候提到的,你需要做一个比较才能使这个练习有用是 0 还是 0xFFFFFFFF...
-
我认为
! (A-B)的结果是 0 或 1,而不是 -1。 -
something xor something 将为 0 if something == something
标签: c optimization bit-manipulation equality