回答
微小差别,但if ($n <= $x)
表现得更加明显。
不知道为什么有人低估了这个,所以+1反击它。 – 2010-08-02 18:48:47
为什么这是最有价值的?这甚至没有正确回答这个问题,第二个更有效。 – 2010-08-02 19:17:12
我的答案的重点是,它不会在所有问题上感到困扰,你应该更喜欢清晰的语法。我猜想有10人同意。 – Triptych 2010-08-02 19:20:15
大概($n <= $x)
因为少了一个操作(没有扣除)。但是,这只对整数有效,差异很可能不重要。
如果您使用的语言没有自动选择更高效的说明,那么您应该记录针对您的语言实施的错误优化错误。 – 2010-08-02 19:49:41
@Bernd严重吗?...我怀疑减法可以很容易地进行优化,特别是在C中,对于两个ints而言'n-1
Yikes!我没有想到溢出。然后再说两件事:OP是关于PHP的,而C中的溢出行为是未定义的。因此,一个(C)编译器可以合理地将'n-1
在你而在第二个您要执行只有一个(比较)执行两个操作(减法然后比较)的第一个实例。我认为可以肯定地说第二个更高性能。无论如何,第一种形式非常不规范,我不知道为什么它会被用来替代第二种形式。
由于您使用的是高级脚本语言,因此执行该操作不是处理器操作的问题。更多的时间将花在解析代码,验证变量类型和管理变量内存等许多事情上。
即使没有实际的区别,我猜第二个会更快,因为语言表达更简单。
术语$ N-1是在更复杂的理解< =一个部分。数学运算符只有几个选项(>,<,< =,==,> =,!=,...),但术语$ n-1需要更复杂的分析,因为它必须由减去在第一符号,然后进行分析两个部分(其也可以是一个函数调用,一个常量,变量,另一个复杂的表达,...)
都不是。 PHP没有强制实施,表示它是字节码,直接从AST中解释,或编译成机器码。实际上,有十亿种不同的实现,主要的实现可能会随着语言和API的其他部分一直发生变化。
即使在x86的程序集级别,这两种操作也没有区别。证明:
X <ý
cmp eax, y
jb its_true
X < = Y
cmp eax, y
jbe its_true
JBE
是同义词类似JC
IIRC,其中只检查一个单一的标志。这两个条件分支只是检查一个标志是否设置。
这些操作可能会影响速度的唯一真正方法是您可以重载小于/大于运算符和相等性,即使如此,速度差异也应该可以忽略不计。
- 1. 使用什么(x < n || x > n)而不是(x!= n)?
- 2. (x << 13)^ x是什么意思?
- 3. 是(x <= y)或! (x> y)更有效率?
- 4. 为什么x <= x false?
- 5. N&(1 << x)== true是什么时候?
- 6. (1U << X)做什么?
- 7. 替代n的[X | X < - [1..N]]
- 8. 什么是x =(10 <n)的Python等价物? 10:n;
- 9. 解释方法(X << n) | (x > >>(32 - N))
- 10. python3有什么区别? <x>和python3。 <x> m
- 11. 为什么通常地图<X, X> =新的HashMap <X, X>()而不是HashMap <X, X> = new HashMap <X, X>()?
- 12. Hash [x] <<“string”做什么?
- 13. 什么意义 “×[] < - as.integer(X)”
- 14. <?或<?php ---有什么区别?
- 15. colnames(x [1])< - “name”和colnames(x)[1] < - “name”之间的区别是什么?
- 16. 对于1-D`X`,`X [n]`和`X [...,n]`有什么区别?
- 17. Haskell中的x <-x是什么意思?
- 18. std :: cout << x;和std :: cout << x << std :: endl;?
- 19. x << a + x << b带括号和不带括号的区别是什么
- 20. 什么是“this.x = x <0?0:x; this.y = y <0?0:y;”意思?
- 21. 在Python中,为什么写round(x [,n])而不是round(x,n)?
- 22. 快速找到最小的n,这样对于X <= n * n
- 23. 什么是PHP中的“<<< SQL”?
- 24. 为什么f <$> g <$> x等于(f。g)<$> x尽管<$>不是正确联想?
- 25. 为什么std :: set :: lower_bound(x)(有效)被定义为最小数字> = x而不是最大数字<= x?
- 26. Func <x,y>和Method(x,y)有什么区别?
- 27. scalac -explaintypes:什么是“<notype><:X?”意思?
- 28. 有什么办法让expression()显示P(a <= X <= b)?
- 29. Php <<<是什么意思?
- 30. <?php,<?, <?=,有什么区别?
使用'<='可能更好,因为它就是这样。另外,我猜测它效率稍高一点,但不够重要。 – Adrian 2010-08-02 18:46:39
同样,虽然'<='读取“小于或等于”,但这并不意味着计算机执行两个单独的操作来实现此目的。看到这个答案:http://stackoverflow.com/questions/1430706/comparison-efficiency/1430713#1430713 – 2010-08-02 18:49:43
今天所有的微观优化问题是什么? – Malfist 2010-08-02 19:04:26