寻找两个变量是否都是真或都是假的更好方法

36

我有两个变量,它们可以是真或假。我通过查询数据库的特定产品ID的存在或不存在来获取这些变量。

现在我需要设置另一个变量,它将是真或假。当这两个变量都为true或都为false时,它将为真值。如果一个为true而另一个为false,则为false值。

目前,我使用if语句来处理它。

if ( v1 == true && v2 == true )
 result = true;
else if ( v1==false && v2 == false )
 result = true;
else if ( v1 == true && v2 == false )
 result = false;
else if ( v1==false && v2 == true )
 result = false;

有没有更好的方法来做这件事?


11
如果(变量 == 真)是一种非常糟糕的反模式,顺便说一下它相当有名 :) - Ilya Smagin
@IlyaSmagin - 为什么这是反模式? - Kyle Delaney
1
@KyleDelaney 最好使用 if(variable)。该变量是一个TRUE/FALSE值。运行 variable==true 会得到一个与变量相等的TRUE/FALSE值。 - undefined
7个回答

157

我可能缺少某些非常基础的东西,但我会尝试一下:

result = ( v1 == v2 );

10
实际上,在像Java、C++、C这些语言中,括号甚至是可选的,因为赋值运算符在这些语言中几乎是所有运算符中优先级最低的。 - Benoit
5
为什么与Java中布尔值相关的回答会得到很多赞(另请参阅https://dev59.com/9W865IYBdhLWcg3wQMOW#3907396)? :D - BoltClock
3
+1:哈哈,当我第一次看到这个问题时,我以为它可能是一个异或问题,但这使得它变得简单明了。 - LiuYan 刘研
@Benoit可选编译器,但我们程序员很容易忘记编译器规则! - corsiKa
@Benoit,你刚才是不是在向我们Well Actually? :P - Ruben Bartelink
显示剩余2条评论

16

你可以使用逻辑异或运算符和逻辑非运算符,如下所示:

result = !(v1^v2);

3
比必要的更加复杂,可以看看DXM的回答。 - jmg

5
这种问题通常通过卡诺图来优化逻辑电路以重现真值表。您的真值表如下:
 v1 v2  f(v1, v2)
  t  t     t
  t  f     f
  f  t     f
  f  f     t
实际上,正如其他人所指出的那样,根据这个真值表,对逻辑的基本熟悉应该立即得出函数!xor。但是,如果您将真值表绘制为卡诺图,则如下所示:
        v2
       f   t 
     ---------
 v  f| t | f |
 1  t| f | t |
     ---------

这个函数看起来像这样:!v1!v2 || v1v2,如果你再看一遍2 variable karnaugh map examples,就会发现它可以简化为!xor

诚然,对于二元Karnaugh图,最好使用普通的逻辑操作进行处理,因为熟悉和记忆。但是当扩展到超过两个变量时,Karnaugh图非常有启示性--你应该了解一下。


2
有趣的投票解决方案选择,我倾向于认为 result = !(v1 xor v2) 比 result = (v1 == v2) 更清晰。 - Jerry Asher
23
我建议您礼貌地再倒一些咖啡……如果您认为!(a ^ b)a == b更清晰易懂,那么您可能还在睡梦中。并且正在做恶梦。 - Konrad Rudolph

2
使用异或运算符(^):
boolean result = !(v1 ^ v2)

-2
为什么不直接比较这两个?
if(v1 == v2) result = true;

-2

简单的方法是,如果两个变量相等,则应为true,如果任何一个为false,则为false。检查一下。

if(v1 == v2)
    return true;
else 
    return false;

-2
if(v1 == v2) 
return true; 
else 
return false;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接