评估&& C中的操作员

时间:2014-10-05 03:44:14

标签: c logical-operators

当我在C中制作程序时,我遇到了一个问题。 &安培;&安培;如果first为false,则不计算第二个操作数。我知道这被称为短路行为。但我想要执行第二个操作数,请参阅下面的代码以了解原因?

while(a-- && b--){
    //some statements
}

请告诉我完成任务的不同方法。非常感谢!

5 个答案:

答案 0 :(得分:2)

如果a和b足够小,a * b不会溢出:

while( (a--) * (b--) )
{...}

如果它们可能很大:

while( ((a--) ? 0xf : 0) & ((b--) ? 0xf : 0) )
{...}

答案 1 :(得分:2)

由于你使用postfix减量,所以整个事情可以简单地重写

while (a && b)
{
  --a; --b;
  //some statements
}

--a; --b;

(你真的需要最后一行是由你决定的。)

但是如果你真的想把所有东西都塞进那个while状态,那么也有不同的方法来实现这个目标。例如,您可以将&&运算符替换为&运算符,只要您记得"标准化" !!

的操作数
while(!!(a--) & !!(b--)){
    //some statements
}

答案 2 :(得分:1)

while(a && b){
     a--; b--;
     //some statements
}
// just after loop ends
a--; b--;

答案 3 :(得分:1)

如果您想要执行第二个操作数,atrue还是false,那么您可以使用逗号运算符。我想你需要这个:

while((b--, a--) && b) {...}

答案 4 :(得分:0)

如果你需要在循环后递减b,为什么不首先保证评估呢?

while (b-- && a--)

当然,如果ab比您的问题所示更复杂,这可能无效。