C#或任何其他语言如何与操作员不相等

时间:2012-07-26 04:23:08

标签: c# oop operators

哪一个更快

            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(!=)运算符是如何解决的。它是否首先实现了相等(==)操作,然后结果被否定为!(a == 100)?任何帮助都会得到很高的评价。

3 个答案:

答案 0 :(得分:10)

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

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

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

另请参阅与您的问题相关的my other answer


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

答案 1 :(得分:1)

我认为在二进制级别上,它只是一个操作(不要引用我),所以要么基本相同。

那就是说,如果你想在这个级别进行优化,你就会做错事。这不是集会。

答案 2 :(得分:-2)

在我看来,一般来说,NOT EQUAL操作(!=)应该比EQUAL(==)更快,因为一旦有一些块值(它基于你的OS是32,NOT EQUAL操作将返回结果) -bit或64-bit on)不相等。

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

我认为2运算符没有相同的实现。