c++ - 在没有分支的情况下测试固定集是否相等

标签 c++ c bit-manipulation

我有一组整数 (x, y, z) 和一个接受 3 个整数的函数 (u, v, w)。如何测试 (x,y,z) == (u,v,w)?天真的方法是:

bool match = (x == u || x == v || x == w) && (y == u || y == v || y == w) && (z == u || z == v || z == w);

有人知道一些智能位运算/算术来做同样的事情吗?

编辑:我可以假设 (x, y, z) 或 (u, v, w) 都不包含重复项。

最佳答案

在这种情况下,您可以将逻辑运算替换为按位运算以消除分支:

bool match = (x == u | x == v | x == w)
           & (y == u | y == v | y == w)
           & (z == u | z == v | z == w);

但是,您必须测量性能影响以查看这是更快还是更慢。

关于c++ - 在没有分支的情况下测试固定集是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5252039/

相关文章:

c++ - void 作为文字类型?

c++ - 有人可以解释为什么我想要或需要将 Lua 与 C++ 混合用于游戏吗?

c - 无法找出 C 中递归二进制搜索的问题

更改 C 代码以完全运行(包括 if 的所有部分)

c++ - 抑制 G++ 3.4.6 中的链接错误

c++ - 为什么我的代码说 109 不是素数?

计数排序 - C

java - 基于 3 个不同的整数创建一个唯一的整数

bit-manipulation - 为什么 n & (n - 1) 总是从 n 中清除 1 位?

c - 无重复创建二维数组的最佳方法