考虑代码:
if(x = a/b, a%b)
printf("do this");
else
printf("do that");
现在,如果我将if
语句替换为if(x = a/b && a % b)
。然后它也有效。所以我想知道用&&
运算符替换逗号,反之亦然,在if-else and loops
答案 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
的结果将被忽略。因此,将,
替换为&&
将无效。而不是正确的事情,