我正在阅读一些在线编写的C代码,并且遇到了以下内容:
if(!(array[index] ^ array[index - 1]))
^运算符是一个按位异或,所以我读了这一行,说它会返回true,如果"索引处的数组值不与前一个索引的值不同"简化后,我将其读作"如果索引处的数组值与前一索引处的数组值相同。"
当我这样阅读时,它似乎是一种过于复杂的写作方式:
if(array[index] == array[index - 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的比较将在一个指令周期内进行处理。
[如果我错了,有经验的人可以纠正我。]