将此if-then逻辑转换为布尔表达式?

时间:2011-07-11 22:32:55

标签: algorithm binary bit-manipulation boolean-logic

我在使这段代码更简洁(最好是一个布尔表达式)时有点大脑放屁。

这是我的代码:

                    if (d.Unemployed)
                    {
                        if (type.Unemployed)
                        {
                            tmp.Unemployed = true;
                        }
                        else
                        {
                            tmp.Unemployed = false;
                        }
                    }
                    else
                    {
                        if (type.Unemployed)
                        {
                            tmp.Unemployed = false;
                        }
                        else
                        {
                            tmp.Unemployed = true;
                        }
                    }

基本上重点是,如果typed没有失业,那么tmp应设置为不失业。

5 个答案:

答案 0 :(得分:13)

怎么样:

tmp.Unemployed = type.Unemployed == d.Unemployed;

答案 1 :(得分:4)

如果我们按照代码构造一个真值表,我们得到

d  | type | tmp
---+------+----
1  |   1  |  1
---+------+----
1  |   0  |  0
----+-----+----
0  |   1  |  0
----+-----+----
0  |   0  |  1

以上等同于xor操作的否定。

tmp = not (d xor type)

如果语言没有xor运算符,我们可以在布尔值上使用!=

tmp = ! (d != type);
// or
tmp = d == type;

答案 2 :(得分:2)

考虑到这会导致你“脑屁”多少,我会考虑使用一个名字很好的变量,以避免将来再次经历这个心理过程。像这样:

isTmpUnemployed = (type.Unemployed == d.Unemployed);
tmp.Unemployed = isTmpUnemployed;

答案 3 :(得分:0)

tmp.Unemployed = d.Unemployed || type.Unemployed ? !tmp.Unemployed : null;

答案 4 :(得分:0)

上述代码的意思是“失业者或非失业者”。因此,不是(A xor B):

 tmp.Unemployed = ! ( D.Unemployed ^ type.Unemployed)