2009-06-21 33 views
8

当我要使用位图存储多个标记时,我总是感到困惑。例如,如果一个对象有10个可能的属性(全部是或否),我使用一个unsigned int和基于属性的前10位(来自LSB)。现在如何设置和取消设置特定位以及如何检查位是否被设置?关于使用位图存储多个值的快速备忘录

如果我想取消设置的第5位,我用: BITAND(旗,2^5 - 1)

但我不能什么就用它来检查,如果第5位被设置或不清晰。

回答

23

如果检查位被设置在n:

(flags & (1 << n)) != 0 

设置在n 位:

flags |= (1 << n) 

明确第n 位:

flags &= ~(1 << n) 

切换第n个

flags ^= (1 << n) 
+0

谢谢,这是我需要的东西,将它贴在我的办公桌:) – Arvind 2009-06-21 13:45:53