这是逻辑"and"运算符的正确用法吗?

Is this a proper use of the logical "and" operator?

本文关键字:用法 运算符 and      更新时间:2023-10-16

我正在看别人的代码,他们做了:

if ( myNum > (num1 && num2 && num3) )

…以便在myNum大于num1、num2和num3时执行代码。这能行吗?

谢谢大家。我不认为它会起作用,但我不是专家,所以我想我应该问一下专家。

假设值的类型为int,在C或c++中,这将首先求值

(num1 && num2 && num3)

(num1 !=0) && (num2 != 0) && (num3 != 0)

c++中的结果是truefalse, C中的结果是1或0。

然后将myNum与该结果进行比较。

不——至少在c#或Java中肯定不会。你想要的:

if ((myName > num1) && (myNum > num2) && (myNum > num3))

(这里可能不需要括号——我永远记不住操作符的优先级。)

在Java或c#中不能工作,因为&&是对布尔操作数的运算符,结果为布尔。它有可能在较弱的强类型语言中编译/运行,但我非常怀疑它在任何主流语言中都能达到预期的效果。

不行,不行。为什么它不能工作取决于语言,但是(num1 &&num2,,第3名将首先用你标注问题的所有语言进行评估。提供(num1 &&num2,,num3)实际编译并计算为某值,然后您将得到myNum>某值

这至少在C中是不正确的:http://codepad.org/R9IP0ZOr

int main()
{
  int myNum = 10;
  int num1,num2,num3 ;
  num1 = 15;
  num2 = 16;
  num3 = 17;
  if ( myNum > (num1 && num2 && num3) )
      printf("%s","YES|GREATER");
  else
    printf("%s","NO|SMALLER");
}   // prints "YES|GREATER"  even though all numbers are greater than myNum

正确的语句应该是:

if(  (myName > num1) && (myNum > num2) && (myNum > num3) )
{
}

标签中没有任何语言。嗯,我认为它可能在C和JavaScript中工作,但肯定不是预期的。

如果myNum, num1, num2和num3是具有>和&&过载。但是创建这样一个类来处理这个问题可能不值得。

这是有效的JavaScript代码,但可能会与编写它的人所期望的不同。

它最终会计算if(myNum > num3)因为(num1 && num2 && num3)只会返回num3的值

或者更花哨一点:

if(Num > Math.Max(Num1,Math.Max(Num2,Num3)))