关于使用位图存储多个值的快速备忘单

时间:2009-06-21 13:33:48

标签: bit-manipulation

当我要使用位图来存储多个标志时,我总是感到困惑。例如,如果一个对象有10个可能的属性(所有是或否),我使用unsigned int和前10位(来自LSB)基于属性。现在如何设置和取消设置特定位以及如何设置是否设置了位?

如果我想取消设置第5位,我使用: bitand(flag,2 ^ 5 - 1)

但我不知道用什么来检查是否设置了第5位。

1 个答案:

答案 0 :(得分:23)

检查n th 位是否设置:

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

设置n th 位:

flags |= (1 << n)

清除n th 位:

flags &= ~(1 << n)

切换n th 位:

flags ^= (1 << n)