哪个操作更快?

San*_*jay -4 c c++ performance

我有两个变量ab.我必须在变量ab上写一个if条件:

这是第一种方法:

if(a > 0 || b >0){
    //do some things
}
Run Code Online (Sandbox Code Playgroud)

这是第二种方法:

if((a+b) > 0){
    //do some thing
}
Run Code Online (Sandbox Code Playgroud)

更新:考虑a和b是unsigned.then将在逻辑或(||)算术(+)运算符之间花费较少的执行时间

这种情况将迭代大约一百万次.
任何有关这方面的帮助将不胜感激.

vso*_*tco 9

你的第二个条件是错的.如果a=1, b=-1000,它会评估false,而你的第一个条件将被评估为true.一般来说,你不必担心这些测试的速度,编译器会对条件进行大量优化,因此逻辑OR非常快.一般来说,人们犯的错误要比优化这些条件更大......所以不要试图优化,除非你真的知道发生了什么,编译器通常做得比我们任何人好得多.

原则上,在第一个表达式中你有2 CMP和1 OR,而在第二个表达式中,你只有一个CMP和一个ADD,所以第二个应该更快(即使编译器在第一种情况下做了一些短路,但这不可能发生100%的时间),但在你的情况下,表达式不相同(好吧,它们是正数...).