我听说过两个术语可以互换使用。有区别吗?
例如,
unsigned char chessboard : 64; /* Bit mask */
unsigned char chessboard_2 [64]; /* Bit array */
答案 0 :(得分:2)
它们都不是位掩码。第一个是位域的定义,该位域仅应作为结构成员有效,第二个是64
unsigned char
s数组。
答案 1 :(得分:2)
位掩码是一个二进制值,当使用按位运算符时,用于引用整数值中的特定位。例如,您可能有:
unsigned int low3 = 0x7;
这是设置了低阶3位的位掩码。然后,您可以使用它来提取值的一部分:
unsigned int value = 030071;
unsigned int value_low3 = value & low3; // result is 01
或更新部分价值:
unsigned int newvalue = (value & ~low3) | 5; // result is 030075
位数组是一个无符号整数或一个无符号整数数组,用于保存一系列布尔标志,其中每个值都位于整数的不同位中。如果要存储大量的布尔值,则与将每个值放在单独的数组元素中相比,这样可以节省大量内存。
但是,这是一个折衷方案:要访问特定的标志,您需要使用屏蔽和移位。
如果您的位数组足够小以适合单个整数,则可以声明:
uint32_t bitarray;
然后使用以下命令访问其特定元素:
bitvalue = (bitarray >> bitnum) & 0x1;
并设置一个元素:
bitarray |= (1u << bitnum);
并清除一个元素:
bitarray &= ~(1u << bitnum);
如果位数组需要多个字,则声明一个数组。通过将位数除以每个数组元素中的位数获得数组索引,然后使用余数确定该单词中的位数并使用上面的表达式。