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

Arv*_*ind 8 bit-manipulation

当我即将使用位图来存储多个标志时,我总是感到困惑.例如,如果一个对象有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)