2013-06-03 39 views
2

我想設置一個給定位從一個位掩碼到另一個位於C中。這是我目前的做法。如何在C中將一個位掩碼設置爲另一位?

const int MASK_THIRD = (1<<2); 

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

有沒有更智能的方法呢?在mask_another (mask_another & (~MASK_THIRD))

回答

4

另一種方式:

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

這在本質上說: 「如果該位是不同的,它翻轉」。它需要少一個操作,這就是爲什麼我認爲值得一提的原因。

+0

我同意這一點,但它更難理解:) – marbel82

+0

同意;雖然XOR很有趣! –

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

復位位與位來自假面具(mask & MASK_THIRD)結合起來。

相關問題