#define SETBIT(x,y) x|=(1<<y) //将X的第Y位置1
#define CLRBIT(x,y) x&=~(1<<y) //将X的第Y位清0
#define GETBIT(x,y) (x & (1 << y)) //取X的第Y位,返回0或非0
flag |= value; //设置位标志
flag &= ~value; //取消位标志
if((flag & value) == value){...} //判断标志位
为什么不建议使用if(flag & value){...}判断?请看例子:
#define 左键按下 0x1
#define 右键按下 0x2
#define 双键按下 (左键按下 | 右键按下)
如果只是用:if(按键 & 双键按下),那么当『按键==左键按下』时,此条判断也会成立。
因此,必须使用:if((按键 & 双键按下)==双键按下)。