-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
        }

2番目の方法の方が速いと思いますが、NOT EQUAL(!=)演算子がどのように解決されるか知りたいです。最初にequal(==)演算を実装し、次に結果が!(a == 100)のように否定されるようなものですか?どんな助けも非常に高く評価されます。

4

3 に答える 3

10

2つの間に違いはありません。の場合int、それはすべて、x86の2つの組み立て手順のいずれかに要約されます。

  • je-等しい場合はジャンプ
  • jne-等しくないジャンプ

これら、またはいずれかのjxx指示には、すべて同じ時間がかかります。

あなたの質問に関連する他の回答も参照してください。


あなたは本当に気にかけているようですので、自分でテストすることをお勧めします。を使用するループとを使用するループの2つのループを作成し==ます!=。次に、とへの呼び出しでそれらをラップすることにより、それらの時間を計りSystem.Diagnostics.Stopwatchます。次に、比較します。ループ全体の反復回数が十分に多い場合(コンテキストスイッチや割り込みなどの他のタイミングエラーを最小限に抑えるため)、違いは見られません。Start()Stop()

于 2012-07-26T04:26:51.367 に答える
1

バイナリレベルでは、これは単一の操作だと思います(引用しないでください)ので、どちらもほとんど同じです。

そうは言っても、このレベルで最適化しようとしているのであれば、何か間違ったことをしていることになります。これはアセンブリではありません。

于 2012-07-26T04:26:41.367 に答える
-2

私の意見では、NOT EQUAL操作(!=)はEQUAL(==)よりも高速である必要があります。これは、NOT EQUAL操作はチャンク値があるとすぐに結果を返すためです(OSに基づくと32ビットまたは64ビットなど)は等しくありません。

あなたの場合、100は4バイト整数であるため、2つの操作はより速く等しくなるはずです。

そして、2演算子は同じ実装を持っていないと思います。

于 2012-07-26T04:32:30.237 に答える