首页 > 解决方案 > 有没有办法使用位运算符而不是多个三元运算符?

问题描述

有没有办法获得将三元?:运算符应用于单个位的结果,而无需一次实际计算一个位,即使用and -s,-s,xor -s,而不是-s 的某种组合?

换句话说,给定我们有 3 个ints(不管位长): ab和 mask m,结果r基本上应该是: r = m ? a : b,除了每个位。

假设a = 0b0101; b = 0b1110;m = 0b0110,结果r应该是0b1100。因此,如果掩码中的第nm位为1(真),则使用; 中的第na。否则(如果掩码中的第nm位为0(假)),则使用 中的第nb

标签: mathlogicbit-manipulationbitwise-operators

解决方案


如果mab保证为 0 或 1,则m ? a : b等价于(m && a) || (!m && b)。您可以通过在公式中注入m=0或简化它来看到这一点。m=1

这也可以按位工作;通常注意按位不是~;所以您正在寻找的“按位三元运算符”可以表示为:

(m&a)|((~m)&b)

推荐阅读