这是逻辑“和”运算符的正确使用吗?

时间:2011-08-05 06:29:15

标签: c++ c

我正在看某人的代码而他们做了:

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

...当myNum大于num1,num2和num3时执行代码。这会有用吗?

编辑:谢谢你们。我认为它不会起作用,但我不是专家,所以我想我会问那些人。

8 个答案:

答案 0 :(得分:4)

假设值的类型为int,则在C或C ++中首先评估

(num1 && num2 && num3)

作为

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

结果将是C ++中的truefalse,以及C中的1或0。

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

答案 1 :(得分:3)

不 - 至少在C#或Java中肯定没有。你想要:

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

(这可能你不需要括号 - 我永远不会记住运算符优先级。)

它不能用Java或C#编写,因为&& Boolean 操作数的运算符,带有 Boolean 结果。它可能会用不太强类型的语言编译/运行,但我高度怀疑它会在任何主流语言中产生预期效果。

答案 2 :(得分:2)

不,那不行。为什么它不起作用取决于语言,但(num1&& num2&& num3)将首先用您标记问题的所有语言进行评估。提供(num1&& num2&& num3)实际上编译和评估某些东西,然后你将得到myNum>东西。

答案 3 :(得分:1)

标签中没有任何语言。好吧,我认为它可能适用于C和JavaScript,但肯定不是预期的。

答案 4 :(得分:1)

如果myNum,num1,num2和num3是带有运算符>的特殊类型,它可能在c ++中有效。和&&超载。但它可能不值得创建这样一个可以解决这个问题的类。

答案 5 :(得分:0)

至少在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) )
{
}

答案 6 :(得分:0)

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

它实际上最终会评估if(myNum > num3),因为(num1 && num2 && num3)只会返回num3

的值

答案 7 :(得分:0)

或者更有意思:

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