找到3个布尔变量的组合的更好方法

时间:2017-07-05 08:43:46

标签: boolean-logic

我有3个bool变量x,y,z。现在,在任何特定时刻,我都可以拥有2 ^ 3 = 8种组合中的一种,如下所示。

e.g。 x = true,y = false,z = false或 x = false,y = true,z = true等等。

如果从编程角度看,有8个案例,或者可能是8个或更多,如果是else语句,以确定当时的组合是什么。 在任何给定的时刻,如果我想知道什么组合存在(给定x,y,z的值)我怎么能知道不使用if-else梯形图,这使得代码逻辑有点笨重。有没有更好/更简单的逻辑/方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

如果必须分别处理8种情况。您可以在变量中对x,y,z的值进行编码,然后对该变量执行切换操作。下面的伪代码 -

v = 0
if (x) { v += 4 }
if (y) { v += 2 }
if (z) { v += 1 }

switch (v)
{
  case 0 : // all false
  case 1 : // z is true
  case 2 : // y is true
  case 3 : // z and y are true
  case 4 : // x is true
  ...
}

答案 1 :(得分:1)

使用按位运算符而不是数值来确定哪些布尔变量处于打开或关闭状态可能是值得的。

// Assign the bitwise value of each variable
X = 4
Y = 2
Z = 1

// Setting X and Z as true using the bitwise OR operator.
v = X | Z // v = 4 + 1 = 5

// Checking if any of the variables are true using the bitwise OR operator
if (v | X+Y+Z) // v = 4 + 2 + 1 = 7

// Checking if ALL of the variables are true using the bitwise AND operator
if (v & X+Y+Z)

// Checking if variable Y is true using the bitwise OR operator
if (v | Y)

// Checking if variable Y is false using the bitwise OR operator
if (v | Y == false)

// Checking if ONLY variable Y is true using the bitwise AND operator
if (v & Y)

// Checking if ONLY variable Y is false using the bitwise AND operator
if (v & Y == false)

这样可以避免弄乱X,Y,Z组合结果的数量。它也更具可读性。