多个位位置的 Unsigned int 位掩码

Unsigned int bitmask for multiple bit positions

我正在自学如何在 C 中执行位掩码和按位运算。

假设我想要一个全 0 的无符号整数位掩码,第 12 位和第 23 位为 1。 我正在考虑通过设置变量

来计算位掩码
unsigned int bitmask = 1<<12 & 1<<23;

我将如何计算具有多个要求的位掩码?

欢迎任何建议和指点。谢谢。

按位与 & 不是正确的运算符,因为它会产生零。您需要按位 | 代替:

unsigned int bitmask = 1U<<12 | 1U<<23;

如果您正在寻找设置了多个位的位掩码,您可以使用 for 循环:

int bits[] = {1, 5, 13, 28};
unsigned int bitmask = 0;
for (int i = 0 ; i != 4 ; i++) {
    bitmask |= 1U << bits[i];
}