当我要使用位图存储多个标志时,我总是感到困惑。例如,如果一个对象有10个可能的属性(全为Yes或No),我将使用无符号int和基于属性的前10位(来自LSB)。现在如何设置和取消设置特定位,以及如何检查是否设置了位?
如果要取消设置第5位,请使用:
比特数(flag,2 ^ 5-1)
但是我不清楚要用什么来检查是否设置了第5位。
最佳答案
检查是否设置了第n位:
(flags & (1 << n)) != 0
设置第n位:
flags |= (1 << n)
清除第n位:
flags &= ~(1 << n)
切换第n位:
flags ^= (1 << n)
关于bit-manipulation - 关于使用位图存储多个值的快速备忘单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1023901/