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);
これは本質的に、「ビットが異なる場合は反転する」と言っています。必要な操作が 1 つ少ないため、言及する価値があると思いました。
mask_another = (mask_another & (~MASK_THIRD)) | (mask & MASK_THIRD);
mask_another のビットをリセットし、 mask(mask_another & (~MASK_THIRD))
のビットと結合します(mask & MASK_THIRD)
。