(听别人说的面试中问过的一个问题,记不清了,如有偏差希望大家补充纠正)
问题:完成相同的功能,for循环使用++和–哪个效率更高?
通常我们在编写需要for循环实现的程序时有两种实现方法:
for(int i = 0;i<arr.length;i++)
for(int i = arr.length-1;i>=0;i--)
分析:
结论:通常来讲第2种用–的方法效率更高
原因如下:
在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。
第2种方法和0比较作为判读,很多cpu和0比较可以减少1个指令.
参考:
i–操作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i > 0,可以直接通过Z标志判断出来。i++操作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i < n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。