C#或任何其他语言如何不等于操作员执行

你好哪一个更快

            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
        }

我认为第二种方法更快,但我很好奇知道如何解决不等于(!=)运算符。 它是否像首先实现平等(==)操作,然后结果被否定为!(a == 100)? 任何帮助将被高度讽刺。


两者之间没有任何区别。 对于int ,它全部归结为x86上的两条汇编指令之一:

  • je - 如果平等就跳
  • jne - 跳转不等于
  • 这些或任何jxx指令都需要相同的时间。

    另见我的与你的问题有关的其他答案。


    既然你真的很在乎,我建议你自己测试一下。 写出两个循环,一个使用== ,另一个使用!= 。 然后使用System.Diagnostics.Stopwatch它们进行计时,方法是将它们包装在对Start()Stop()调用中。 然后比较。 通过循环迭代次数足够多(以尽量减少上下文切换,中断等其他时序错误),您将看到没有任何区别。


    我认为在二元层面上,这是一个单一的操作(不要引用我),所以两者几乎都是一样的。

    也就是说,如果你试图在这个层次上进行优化,那么你做错了什么。 这不是装配。


    在我看来,一般来说,NOT EQUAL操作(!=)应该比EQUAL(==)更快,因为只要存在某个块值,NOT EQUAL操作就会返回结果(它基于您的操作系统是32位或64位左右)不相等。

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

    我认为2运营商没有相同的实施。

    链接地址: http://www.djcxy.com/p/31569.html

    上一篇: How C# or any other language NOT Equal to operator performs

    下一篇: Which operator is faster (> or >=), (< or <=)?