Performance 与运营商及&;及||

Performance 与运营商及&;及||,performance,operators,microbenchmark,Performance,Operators,Microbenchmark,我有一个简单的性能怀疑。当我必须检查几个变量时,这两个选项中哪一个性能更好 return (a >= 0 && b >= 0 && c >= 0 && d >= 0); 或 返回!(a

我有一个简单的性能怀疑。当我必须检查几个变量时,这两个选项中哪一个性能更好

return (a >= 0 && b >= 0 && c >= 0 && d >= 0);

返回!(a<0 | | b<0 | | c<0 | | d<0);
我问这个问题是因为我假设| |操作符在发现真实条件时停止,但是&&操作符必须与整个条件进行比较


所以。。。哪个更好?

当发现第一个假条件时,第一个示例将停止,当发现第一个真条件时,第二个示例将停止。假设第二个语句有一系列比较,当第一个语句为false时,每个比较都为true,那么两个return语句将在相同数量的比较之后停止。因此,除非编译器对这两组比较执行异常操作,否则它们应该在相似的时间内执行。

&&在发现错误条件时停止。|当所有条件都为假时,还必须比较整个条件。这可能取决于实现和一些优化魔术,但一般来说,没有一个更快,也没有办法从一个运算符重写到另一个运算符并提高速度。是的,我想这取决于变量值。如果a=-1,第一个选项更好,但是如果a=1,第二个更好。谢谢,不用了。我想说的是,不管变量值是多少,步骤数都是一样的。
return !(a < 0 || b < 0 || c < 0 || d < 0);