bit-manipulation - 检查 NOT XOR 的 bool 状态是否与检查等价性相同?

标签 bit-manipulation bitwise-operators

我正在阅读一些在线编写的 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/

相关文章:

java - 如何在事先不知道最后一个 1 的情况下用 '1' 填充 Java 字节中的高端位? (FAST FIX 负整数解码器)

Javascript xor ^ 与 0 返回错误结果

php - 如何在 PHP 中使用 MySQL 按位运算?

php - 对 bool 数组执行按位运算

java - 字符串格式选项

c - 在 C 中使用按位运算和指针算法将二进制转换为无符号整数

javascript - 在网页中嵌入二进制数据?

c++ - 数字的按位运算是否出错

GoLang 按位计算

assembly - `test` 指令是如何工作的?