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);

これは本質的に、「ビットが異なる場合は反転する」と言っています。必要な操作が 1 つ少ないため、言及する価値があると思いました。

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

mask_another のビットをリセットし、 mask(mask_another & (~MASK_THIRD))のビットと結合します(mask & MASK_THIRD)

于 2013-06-03T14:15:26.473 に答える