当我要使用位图来存储多个标志时,我总是感到困惑。例如,如果一个对象有10个可能的属性(所有是或否),我使用unsigned int和前10位(来自LSB)基于属性。现在如何设置和取消设置特定位以及如何设置是否设置了位?
如果我想取消设置第5位,我使用: bitand(flag,2 ^ 5 - 1)
但我不知道用什么来检查是否设置了第5位。
答案 0 :(得分:23)
检查n th 位是否设置:
(flags & (1 << n)) != 0
设置n th 位:
flags |= (1 << n)
清除n th 位:
flags &= ~(1 << n)
切换n th 位:
flags ^= (1 << n)