【发布时间】:2019-01-25 16:18:11
【问题描述】:
我正在使用 C 语言开发微控制器。其中一部分涉及更改寄存器中的位值。我想出了一些宏来让事情变得更简单:
#define BIT_SET(addr, shift) (addr | (1 << shift))
#define BIT_RESET(addr, shift) (addr & ~(1 << shift))
#define BIT_GET(addr, shift) (addr & (1 << shift))
...
reg1 = BIT_SET(reg1, 3); //set bit 3
...
但是,现在我想制作一个宏,它会一次更改几个位。例如,可能想将10101010 的前3 位更改为110,从而得到数字11001010。
我可以在 C 中做到这一点吗?还是我以错误的方式接近这个?
【问题讨论】:
-
首先想一想,你将如何调用这样的宏?
-
先是-33,然后是192
-
@cleblanc 这很难读。你能改写/详细说明吗?
标签: c macros c-preprocessor