以下示例代码:
// Note that a, b, c and d can have value of 0 or 1 only
int isAllTrue(int a, int b, int c, int d)
{
return (a && b && c && d);
// THIS ALSO RETURNS CORRECT VALUE
// return (a & b & c & d);
}
如果我们知道操作数可以是0或1,那么从性能的角度来看哪个操作更可取:按位还是逻辑?这真的很重要吗?
在按位“&”的情况下评估是否停止当操作数为0?
答案 0 :(得分:1)
使用&用于位操作。使用&&用于逻辑运算。如果您使用按位操作,您应该使用逻辑操作,反之亦然,读者将(a)混淆,(b)非常仔细地检查您的代码是否引入了一个微妙的错误。
编程依赖于习语。如果你的代码与预期的习语不符,那么你必须有充分的理由,你应该写一个解释原因的评论。
答案 1 :(得分:-1)
使用哪种配方并不重要,通过主动编译器优化,所有显示的评估都应该在编译时完成。
至于你的上一个问题,按位运算符不使用快捷方式评估,因此总是评估每个操作数。
答案 2 :(得分:-3)
似乎有很多关于像这样的问题的混淆......以及很多的错误答案。好吧,这是事实 for C / C ++ :
true
,否则为false
-
无论您检查了多少个数字,但0 && 1
将被评估为false
,例如因为第一个0 - 它可以重写为false && true
结论:你的问题没有意义 - 因为你认为这些算子是相似的......他们不是。