我希望能了解更多关于这方面的知识,以便在我的项目中实现。
目前我已经有了基本的了解:
unsigned char flags = 0; //8 bits
flags |= 0x2; //apply random flag
if(flags & 0x2) {
printf("Opt 2 set");
}
现在我希望做一些更复杂的事情,我想要做的是像这样应用三个标志:
flags = (0x1 | 0x2 | 0x4);
然后从中删除标志0x1
和0x2
?我认为可以通过应用按位NOT(并通过按位AND应用它)来执行类似以下的操作:
flags &= ~(0x1 | 0x2);
显然,无论如何,当我检查时它们仍然存在。
我也不知道如何检查它们是否不存在于位标志中(因此我无法检查我的先前代码是否有效),这应该是什么样子?
if(flags & ~0x2)
printf("flag 2 not set");
我最近的搜索中没有找到任何与此相关的资源,但我愿意学习并将其教给他人,我对此非常感兴趣。如果这很困惑或简单,我很抱歉。
if(flags & (0x1 | 0x2))
,但是这似乎即使我只设置了0x1
也能工作。 - John