我正在阅读一些在线编写的 C 代码并遇到以下行:
if(!(array[index] ^ array[index - 1]))
^ 运算符是按位异或,所以我读到这行是说如果“索引处的数组值不与前一个索引处的值不同,它将返回 true。”简而言之,我将其解读为“如果索引处的数组值与前一个索引处的数组值相同。”
当我这样读的时候,它似乎是一种过于复杂的写法:
if(array[index] == array[index - 1])
这些表达方式相同吗?如果不是,那么为什么?如果我没有误读它,我得到的最好解释是,由于这段代码涉及时钟信号的中断,所以它需要快速。也许按位运算比 ==
的幕后操作更快?
最佳答案
是的,基本上它们是一样的。
让我们看看这里:
a b (a) xnor (b)
___|_____|_______________|
0 | 0 | 1
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1
如您所见,xnor 仅在 a 和 b 相等时才返回 1。
这是嵌入式 C 语言中最受青睐的技术之一,尤其是当您有内存或时间限制时。
自算术逻辑单元 (ALU) 起,包括一个 n 位 XNOR 电路(n:取决于您的处理器架构);与 XNOR 的比较将在一个指令周期内处理。
[如果我说错了,有经验的人可以指正我。]
关于bit-manipulation - 检查 NOT XOR 的 bool 状态是否与检查等价性相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763778/