布尔A,B和C的真相组合

时间:2016-11-01 23:17:56

标签: c++ boolean truthtable

我需要结合3个bool来测试c ++中的整个真值表(8种组合)。

我有2个需要注意的特殊情况,它们是a,b和c都是真的,而a,b是真的,但c是假的。

其余部分不需要特别照顾(它们将自动一起工作,无需特定于案例的说明)

有没有办法只测试这两种情况,然后是个别情况,但仍允许个人一起工作?

,例如,

if(a& b&& c)

和if(a&& b&&!c)

然后如果a,如果b,如果c分别

我认为它使用if else,但我没有运气,我现在的方式执行一些操作两次,因为“a”在b c,b!c和a中都是真的。

我希望这很清楚,我第一次在这里发帖,如果不是,那就道歉。

1 个答案:

答案 0 :(得分:1)

您的两个特殊情况可以处理如下:

if (a && b)
    if (c)
        all_true();
    else
        ab_true_c_false();

另一种可能性是将算术结合起来,然后将结果用作索引:

typedef void (*action)();

// handlers for the individual cases:
void all_false() { std::cout << "all_false"; }
void a_true() { std::cout << "a true"; }
// ...

// table of handlers. The order of handlers in the array is critical.
static const action actions[] = { 
   all_false, a_true, b_true, ab_true, 
   c_true, ac_true, bc_true, abc_true };

// Create index into array 
int x = a | (b << 1) | (c << 2);

// invoke correct handler:    
actions[x]();