2016-04-21 45 views
3

我是通過一些C代碼,在網上寫和整個以下行來閱讀:檢查NOT XOR的布爾狀態與檢查等價性是否相同?

if(!(array[index]^array[index - 1])) 

^運算是按位異或,所以我讀這條線說,它將返回true,如果「數組值在索引是不是不同於在以前的索引值。「簡化後,我將其讀作「如果索引處的數組值與前一索引處的數組值相同」。

當我看到它這樣,它似乎是一個過於複雜的方式來寫:

if(array[index] == array[index - 1]) 

難道這些表情一樣嗎?如果不是,那爲什麼?如果我沒有誤讀它,我得到的最好的解釋是,由於該代碼涉及時鐘信號的中斷,因此它需要很快。也許按位操作比在==後面的幕後操作更快?

+1

這是有點關係:http://stackoverflow.com/questions/7054124/is-there-xnor-logical-biconditional-operator -in-c –

+0

也許這只是一些代碼混淆 –

回答

0

是的,基本上它們是一樣的東西。

讓我們在這裏看到:

a b  (a) xnor (b) 
___|_____|_______________| 
0 | 0 |  1 
0 | 1 |  0 
1 | 0 |  0 
1 | 1 |  1 

正如你可以在這裏看到,在同或返回1,只有當A和B是相等的。

這是嵌入式C中最受歡迎的技術之一,特別是當您有內存或時間限制時。由於算術邏輯單元(ALU)包含一個n位XNOR電路(n:取決於您的處理器架構);因此,與XNOR的比較將在一個指令週期內處理。

[誰的人有更多的經驗可以糾正我,如果我錯了。]