2016-12-30 142 views
0

我想知道如何組合邏輯運算符是多麼昂貴?結合它們的最佳方式是什麼?結合邏輯運算符C

例如: 以下兩條語句在優化方面有什麼區別?

1) if((!x || !y || !z) && (a != b)) 
2) if(!(x && y && z) && (a != b)) 

我聽到同行說你應該比ORing操作更頻繁地使用AND操作。我是C語言的新手。請有人幫我理解這一點。任何材料或鏈接也會有所幫助。

+1

只需將其留給編譯器即可。這在優化這些東西時可能更有效率。 – alk

+1

根據德摩根定律,它們是相同的。 – haccks

+6

請注意C語言中用於評估條件表達式的[短路]規則(https://en.wikipedia.org/wiki/Short-circuit_evaluation)。如果可以在不評估其他表達式的情況下知道整個條件語句,則它們是跳過。所以要小心你可能會發生的任何副作用,但不要(可能是值改變或函數調用)。直接的答案是以最簡單明瞭的方式寫出條件:明年你會看到它。 –

回答

3

除非此代碼位於代碼的熱路徑極其,否則請始終選擇對未來讀者最符合邏輯的表單。

如果它在熱路徑中,則編譯並查看程序集。一個很好的工具,它可以讓你看到輸出很多編譯器和CPU是godbolt

下面是一個例子測試您的方案:fiddle

正如你所看到的,指令的數量相同。