检查NOT XOR的布尔状态是否与检查等效性相同?

时间:2016-04-21 08:19:49

标签: bit-manipulation bitwise-operators

我正在阅读一些在线编写的C代码,并且遇到了以下内容:

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

^运算符是一个按位异或,所以我读了这一行,说它会返回true,如果"索引处的数组值与前一个索引的值不同"简化后,我将其读作"如果索引处的数组值与前一索引处的数组值相同。"

当我这样阅读时,它似乎是一种过于复杂的写作方式:

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

这些表达式是否相同?如果不是,为什么呢?如果我没有误读它,我得到的最好解释是,由于此代码涉及时钟信号的中断,因此需要快速。也许按位操作比使用==的幕后操作更快?

1 个答案:

答案 0 :(得分:0)

是的,基本上它们是一样的。

让我们来看看:

$job = Start-Job { Start-Process -FilePath \\company\path\Comparer\Comparer.exe -PassThru -Wait -WindowStyle Normal }
Wait-Job $job
Receive-Job $job

$programName = 'Comparer'
$isRunning = (Get-Process | Where-Object { $_.Name -eq $programName }).Count -gt 0

while($isRunning) {

    $isRunning = (Get-Process | Where-Object { $_.Name -eq $programName }).Count -gt 0
}

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

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

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

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