0

考虑代码:

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

4 回答 4

3

他们是完全不同的!


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

所以,

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%ba/b只有在(即a/b不为零)为真时才会评估。

于 2014-04-30T07:29:48.393 回答
2

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

如果你这样做

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

当且仅当 a/b 非零且 a % b 非零时,才会打印“执行此操作”。而对于逗号运算符,“do this”仅在 a % b 非零时打印。

于 2014-04-30T07:29:39.967 回答
1
if(x = a/b, a%b)

是一种模糊的、不可读的写作方式

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

x = a/b && a % b

相当于

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

总而言之,不要在同一条线上混合大量不同的运算符。你用它实现的唯一一件事就是在创造错误的同时迷惑自己。

于 2014-04-30T07:37:24.213 回答
0

a/b&& 运算符在确定表达式时强制考虑 as 的结果x = a/b && a%b,如果是,a/b则忽略 的结果。因此,替换,&&不会总是有效。而不是正确的做法,

于 2014-04-30T07:33:44.263 回答