当我在C中制作程序时,我遇到了一个问题。 &安培;&安培;如果first为false,则不计算第二个操作数。我知道这被称为短路行为。但我想要执行第二个操作数,请参阅下面的代码以了解原因?
while(a-- && b--){
//some statements
}
请告诉我完成任务的不同方法。非常感谢!
答案 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)
如果您想要执行第二个操作数,a
是true
还是false
,那么您可以使用逗号运算符。我想你需要这个:
while((b--, a--) && b) {...}
答案 4 :(得分:0)
如果你需要在循环后递减b
,为什么不首先保证评估呢?
while (b-- && a--)
当然,如果a
和b
比您的问题所示更复杂,这可能无效。