-3

你好,哪个更快

            int a = 100;
        //First Way
        if (a != 100)
        {
            //Do something when a is not equal to 100
        }
        else
        {
            //Do something when a is equal to 100
        }

        //Second Way
        if (a == 100)
        {
            //Do something when a is equal to 100

        }
        else
        {
            //Do something when a is not equal to 100
        }

我认为第二种方法更快,但我很想知道如何解决 NOT EQUAL (!=) 运算符。是不是首先它实现了 equal(==) 操作,然后结果像 !(a==100) 一样被否定?任何帮助都将受到高度重视。

4

3 回答 3

10

两者之间没有任何区别。对于 an int,这一切都归结为 x86 上的两个汇编指令之一:

  • je- 如果相等则跳转
  • jne- 跳它不相等

这些或任何jxx指令都需要相同的时间。

另请参阅我与您的问题相关的其他答案


既然你似乎真的很在乎,我建议你自己测试一下。编写两个循环,一个使用==,一个使用!=。然后通过将它们包装在对andSystem.Diagnostics.Stopwatch的调用中,为它们计时。然后比较。通过循环进行足够多的迭代(以最小化其他时序错误,如上下文切换、中断等),您将看不到任何差异。Start()Stop()

于 2012-07-26T04:26:51.367 回答
1

我认为在二进制级别上,这是一个单一的操作(不要引用我的话),所以两者都差不多。

也就是说,如果您尝试在此级别进行优化,那么您做错了什么。这不是组装。

于 2012-07-26T04:26:41.367 回答
-2

在我看来,一般来说,NOT EQUAL 操作 (!=) 应该比 EQUAL (==) 快,因为 NOT EQUAL 操作将在有一些块值时立即返回结果(它基于您的操作系统是 32 位或64 位等)不相等。

在您的情况下,2 个操作应该更快相等,因为 100 是一个 4 字节整数。

而且我认为 2 运营商没有相同的实现。

于 2012-07-26T04:32:30.237 回答