我正在研究一个简单的组合学部分,发现在4位srring中,我需要恢复另外两位给定位置的两位的位置。
例如,(0,1)映射到(2,3),(0,2)到(1,3)等,总共有六个组合。
我的解决方案是使用四个嵌套三元运算符测试位:

ab is a four bit string, with two bits set.
c = ((((ab & 1) ? (((ab & 2) ? ... ))) : 0)
abc = ab | c
recover the last bit in the same fashion from abc.

我必须澄清,没有使用for循环,我的目标语言是C++元编程模板。我知道我明确地指定了语言,但在我看来它仍然是不可知论的
你能想出更好的办法/更聪明的办法吗?
谢谢

最佳答案

只需将值与二进制1111进行异或运算-这将翻转四位,给您另外两位。

cd = ab ^ 0xF;

关于algorithm - 给定四位一组中的两位,找到另外两位的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2503863/

10-09 03:37