当前位置: 首页 > 知识库问答 >
问题:

在C++中,i>-1和i>=0[重复]哪个更好

孟和怡
2023-03-14

问题是,如果变量i是int的话,哪一个性能更好。

  1. i>-1
  2. i>=0

我正在寻找性能方面的内存块或寄存器所需的和CPU周期所需的这两种情况。

共有1个答案

澹台岳
2023-03-14

在汇编语言中,两者都在相同的结构上:

>

  • i>-1

    cmp   [register with i value],-1
    jg    [somewhere]
    

    i>=0

    cmp   [register with i value],0
    jge   [somewhere]
    

    根据使用的跳转标志,指令jg进行两个标志比较(ZF=0和SF=OF),而jge只进行一个标志比较(SF=OF)。

    所以我想说,这两种方法都使用了几乎相同的寄存器和CPU周期,可能对i>=0进行了稍微快一点的比较。

  •  类似资料:
    • 问题内容: 我今天发现了一件奇怪的事情,想知道是否有人可以阐明其中的区别? 运行完每个循环后,没有改变,但是在每个元素中添加了一个。我实际上使用该版本在循环内写入初始化的NumPy数组。 问题答案: 不同之处在于,一个修改数据结构本身(就地操作),而另一个仅 重新分配 变量。 仅出于完整性考虑: 是 不是总是 做就地操作,有(至少)三种例外情况: 如果 没有实现 的则方法的声明仅仅是一个速记。如果

    • 问题内容: 哪个更正确?Java的结果为12或C =13。或者,如果不是正确性,请详细说明。 问题答案: 没有比这更正确的了。它实际上是未定义的,称为序列点错误。 http://en.wikipedia.org/wiki/Sequence_point

    • 我想做到这一点: 我该怎么做?我想在那里得到变量名,但它将是不起作用的东西(字符串整数)的组合,而不是变量名

    • 我有以下代码: 我的预期输出是注释。实际输出如下: 我对函数调用和输入运算符感到困惑。有人能好心解释一下实际结果吗?

    • 如果标量对象上的副作用相对于同一标量对象上的另一个副作用或使用同一标量对象的值进行的值计算没有排序,则行为是未定义的。 缺陷报告中的解释没有帮助我理解。lvalue-to-rvalue转换与任何事情有什么关系?我错在哪里了?

    • 假设我有一个程序需要检查变量是否大于零。总是正的,所以说相当于说。 这两种表达式之间是否存在性能差异?为什么? 我知道没有明显的性能差异,这更多的是一个哲学问题。