2016-04-21 48 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的比较将在一个指令周期内处理。

[谁的人有更多的经验可以纠正我,如果我错了。]