逗号vs&&循环中的运算符和if-else

时间:2014-04-30 07:26:57

标签: c comma-operator

考虑代码:

if(x = a/b, a%b) 
 printf("do this");
else 
 printf("do that");

现在,如果我将if语句替换为if(x = a/b && a % b)。然后它也有效。所以我想知道用&&运算符替换逗号,反之亦然,在if-else and loops

中始终有效

4 个答案:

答案 0 :(得分:3)

他们完全不同!


在第一个示例中,,comma operator,它是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(和类型)

所以,

if(x = a/b, a%b) 

相当于(感谢@jaket)

x = a/b;
if(a%b) 

a%b将始终被评估。


对于第二个:

if(x = a/b && a % b)

相当于

x = (a/b) && (a%b);
if( x )
仅当a%b(即a/b不为零)为真时才会评估

a/b

答案 1 :(得分:2)

如果用&&替换逗号运算符,则会稍微改变逻辑。逗号运算符的作用是执行x = a / b并“丢弃结果”,即不考虑if的条件,只考虑%b。

如果你这样做

if(x = a/b && a % b)

当且仅当a / b不为零且%b为非零时,才会打印“执行此操作”。而使用逗号运算符时,仅当%b非零时才会打印“执行此操作”。

答案 2 :(得分:1)

if(x = a/b, a%b)

是一种混淆,难以理解的写作方式

x = a/b;
if(a%b)

但是

x = a/b && a % b

相当于

x = ( (a/b) && (a%b) );

总结一下,不要在同一条线上混合使用很多不同的运算符。你用它实现的唯一的是让你自己迷惑,同时制造错误。

答案 3 :(得分:0)

&&运算符在确定表达式a/b时强制考虑x = a/b && a%b的结果。如果,a/b的结果将被忽略。因此,将,替换为&&将无效。而不是正确的事情,