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

标签 bit-manipulation

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

相关文章:

bit-manipulation - 掩码和聚合位

java - 在 Java 中,如何将一个 64 位的字符串分成四个 16 位的字符串?

c - 是否可以定义自定义大小的位数组

c++ - 将一个字节组合成 long long

c - 将两个溢出的整数乘以三分之一

c - C 中仅使用位运算符的符号函数

c++ - 有效地删除字节数组中的低半字节 - C++

ruby - ruby 编程中的按位运算符

c# - 比较并识别特定位置的位置和值并打印

c++ - 如何将 4 个 2 位值合并为 1 个 8 位值?