检查 NOT 异或的布尔状态与检查等价是否相同?

3

我正在阅读一些在线编写的C代码,遇到了以下这行代码:

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

^ 操作符是按位异或,因此我理解这行代码的意思是:如果“索引处的数组值与前一个索引处的值不同”,则返回true。简化一下,可以理解为“如果索引处的数组值与前一个索引处的数组值相同,则返回true”。

按照这种理解,这段代码似乎是用一种过于复杂的方式来表达以下内容:

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

这些表达式是相同的吗?如果不是,为什么呢?如果我没有读错,我最好的解释是,由于这段代码涉及时钟信号上的中断,因此它需要快速。也许位运算比使用==更快?


1
这与编程有关:https://dev59.com/uWw05IYBdhLWcg3wwEUS - Paulo Almeida
可能只是一些代码混淆。 - phuclv
1个回答

0

是的,基本上它们是同一件事。

让我们看看这里:

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

正如您在这里看到的,只有当a和b相等时,xnor才返回1。

这是嵌入式C中最常用的技术之一,特别是当您有内存或时间限制时。

由于算术逻辑单元(ALU)包括一个n位XNOR电路(n:取决于您的处理器架构);与XNOR进行比较将在一个指令周期内处理。

【有更多经验的人可以纠正我】


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接