vol*_*ing 4 c embedded macros bit-manipulation
我试着写一些简单的宏来简化设置和清除位的任务,这应该是一个简单的任务,但我似乎无法使它们正常工作.
#define SET_BIT(p,n) ((p) |= (1 << (n)))
#define CLR_BIT(p,n) ((p) &= (~(1) << (n)))
Run Code Online (Sandbox Code Playgroud)
Art*_*ius 10
尝试
#define CLR_BIT(p,n) ((p) &= ~((1) << (n)))
Run Code Online (Sandbox Code Playgroud)
但是由于一般宏观邪恶的各种原因,我建议不要使用宏.使用内联函数并通过引用传递,如下所示:
static inline void set_bit(long *x, int bitNum) {
*x |= (1L << bitNum);
}
Run Code Online (Sandbox Code Playgroud)
((p) &= (~(1) << (n)))应该是一个明显的问题((p) &= ~(1 << (n))).
除此之外,您必须小心整数类型的宽度.如果您使用的unsigned long话可能需要使用(例如)((p) |= (1UL << (n)))