2

我想在 C 中将一个给定的位从一个位掩码设置为另一个位掩码。这就是我目前的做法。

const int MASK_THIRD = (1<<2);

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

有更聪明的方法吗?

4

2 回答 2

4

另一种方式:

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

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

于 2013-06-03T14:35:30.030 回答
1
mask_another = (mask_another & (~MASK_THIRD)) | (mask & MASK_THIRD);

重置 mask_another 中(mask_another & (~MASK_THIRD))的位并将其与 mask 中的位结合(mask & MASK_THIRD)

于 2013-06-03T14:15:26.473 回答