【问题标题】:Bit manipulation of a single bit of an integer or bit masking整数或位掩码的单个位的位操作
【发布时间】:2025-12-30 22:30:10
【问题描述】:

我想定义寄存器或变量的单个位。 例如: #define Pin5 (5th bit of portA) //假设 porta 是 16 位数据类型。

我如何定义一个变量的一个位,以便我可以轻松地切换那个位并使我的代码更容易在我的眼中。请注意,我希望位值成为变量的 RValue。

例如 引脚5 = 1; //将导致partA的第5位为1

【问题讨论】:

  • @AShelly 实际上,Sam 似乎在问是否有任何方法可以将位定义为左值,这是一个比“我如何设置它”更有趣的问题。
  • 哦,好点。答案是位域的联合。
  • 是的,我也这么认为,但后来我在您的链接上阅读了位域答案中的 cmets,并意识到任何使用位域都会很糟糕。

标签: bit-manipulation bit bitmask


【解决方案1】:

考虑到位域是个坏主意,我能想到的最简洁的代码“看起来很容易”(即将尽可能多的语法包装到宏中):

#define setbit(n) |=(1<<(n))
#define clrbit(n) &=~(1<<(n))

然后您的示例代码将是:

portA setbit(5);

【讨论】: