如何在C中将给定位从一个位掩码设置为另一个位掩码?

时间:2013-06-03 14:10:54

标签: c bitmask

我想在C中将一个位掩码设置为另一个位掩码。这就是我目前的方式。

const int MASK_THIRD = (1<<2);

if (mask & MASK_THIRD) {
    mask_another |= MASK_THIRD;
} else {
    mask_another &= ~MASK_THIRD;
}

有更聪明的方法吗?

2 个答案:

答案 0 :(得分:4)

另一种方式:

mask_another ^= ((mask ^ mask_another) & MASK_THIRD);

本质上说“如果位不同,请将其翻转”。它需要少一个操作,这就是我认为值得一提的原因。

答案 1 :(得分:1)

mask_another = (mask_another & (~MASK_THIRD)) | (mask & MASK_THIRD);

重置mask_another (mask_another & (~MASK_THIRD))中的位,并将其与掩码(mask & MASK_THIRD)中的位组合。