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



我想在c中设置一个给定的位从一个位掩码到另一个位掩码,这是我目前的做法。

const int MASK_THIRD = (1<<2);
if (mask & MASK_THIRD) {
    mask_another |= MASK_THIRD;
} else {
    mask_another &= ~MASK_THIRD;
}

有更聪明的方法吗?

另一种说法:

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

本质上是说"如果比特不同,翻转它"。它需要少一个操作,这就是为什么我认为值得一提的原因。

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

复位掩码(mask_another & (~MASK_THIRD))中的位,并与掩码(mask & MASK_THIRD)中的位合并。

相关内容

最新更新