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