如何使用单行代码设置和清除不同的位(C)

mic*_*elo 2 c bit-manipulation firmware bitwise-operators

data |= (1 << 3)在不中断其他位的情况下设置位(3).data &= ~(1 << 4)在不中断其他位的情况下复位bit(4).如何在一条指令中完成这两项任务?

(因为这实际上只是为了可读性,我计划#define以一种可爱的方式使用它#define gpioHigh(x) <insert code>.另一种方法是弄清楚如何正确地将gpio指针传递给我为此目的而明确写出的函数,但是这样做)

谢谢!

麦克风

sam*_*gak 5

在单个指令中不可能.这是因为您需要对不同的位执行3种操作:

  • 设置它们(第3位)
  • 清除它们(第4位)
  • 别管它们了(所有其他位)

如何使用由二进制数字组成的位掩码从三种可能性中选择一种?

当然,你可以用一行来做,例如:

data = (data | (1 << 3)) & ~(1 << 4)
Run Code Online (Sandbox Code Playgroud)