找到新位的优化方法

Optimized way to find new bits on

与上次读取的状态相比,我们需要找到从设备接收到的互锁状态中打开的新位。这是为了为新设置的位触发错误代码。我正在使用以下语句。

bits_on =~last_status & new_status;

有没有更好的方法来做到这一点?

它只有 2 个操作和一个赋值,所以改进它的唯一方法是在 1 个操作和一个赋值中完成它。它不对应于任何简单的 C 位操作运算符,因此不可能在 1 个操作中完成。

但是,根据您的架构,您的编译器实际上可能已经将其编译为一条指令。

ANDN (Logical AND NOT) is part of the BMI1指令集,等价于~x & y.