使用“AND”或“OR”的效率

时间:2013-12-18 05:54:22

标签: c operators logic

哪个更好用?&&还是||?例如,如果我需要检查输入是否在5到27之间并且可以被3整除,那么最好检查为

if((num < 5) || (num > 27) || (num%3 != 0))
{
//skip
}
else
{
//operations
}

OR

if((num >= 5) && (num <= 27) && (num%3 == 0)
{
//operations
}

2 个答案:

答案 0 :(得分:0)

除非你是在非常严格的循环中这样做,否则你永远不会注意到任何差异。

大多数C编译器都会重写表达式以便随时利用短路评估,因此对于那些编译器而言,顺序是无关紧要的(对于C++ there are exceptions)。

如果您的编译器无法优化布尔数学(在现代编译器中不太可能),则第二种形式更好,因为它允许跳过某些术语。

答案 1 :(得分:0)

从CPU的角度来看,||和&amp;&amp;更有可能完全花费相同的时间。从编译器的角度来看,在两者之间进行转换将是一项微不足道的操作 - 这肯定是它将为您正确做出的选择。使用最清楚的人。

更好地利用C的短路来确保分支在尽可能少的执行指令中确定。