哪个运营商更快:>或==?
示例:我想测试一个值(可以有一个正值或-1)对-1:
if(time > -1)
// or
if (time != -1)
Run Code Online (Sandbox Code Playgroud)
时间有类型"int"
Dev*_*lar 16
标准没有说.因此,它取决于给定编译器在给定版本中生成的操作码,以及给定CPU执行它们的速度.
即,实现/平台定义.
您可以通过查看/基准测试可执行代码来找到特定的编译器/平台组合.
但我真的怀疑它会带来多大的不同; 这种微观优化几乎总是被更高级别的架构决策所相形见绌.
从语义上讲,这些条件是不同的.第一个检查对象time是正还是零.
if(time > -1)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,写作会更好
if( time >= 0 )
Run Code Online (Sandbox Code Playgroud)
但是,某些函数返回非负值或-1.例如,如果搜索函数没有在数组中找到元素,则它可以返回-1.或-1表示错误状态或缺少值.
在这种情况下,最好使用条件
if ( time != -1 )
Run Code Online (Sandbox Code Playgroud)
至于编译器只能生成一个mashine指令以在两种情况下进行比较的速度.
当你应该考虑速度时,情况并非如此.你应该考虑哪种情况更具表现力,并表明程序员的意图.
它取决于平台.通常,这两个操作将直接转换为汇编程序指令"如果大于"则分支,而"如果不相等则分支".这两者之间不太可能存在任何性能差异,如果存在性能差异,则不会产生重大影响.
唯一比其他分支指令略快的分支指令通常是"如果为零则分支"/"如果不为零则分支".
(在编译器糟糕的黑暗时代,C程序员因此喜欢将循环写为向下计数为零而不是向上计数,以便对零而不是值进行比较,以便获得几纳秒.现代编译器可以自己进行优化,但是你仍然会偶尔看到这样的循环.)
一般而言,您不应该关注性能的微观管理.如果你花时间思考是否>比速度更快!=,而不是考虑程序设计,可读性和功能,你需要尽快设置优先级.
| 归档时间: |
|
| 查看次数: |
1775 次 |
| 最近记录: |