我刚试过这个密码:
void swapBit(unsigned char* numbA, unsigned char* numbB, short bitPosition)//bitPosition 0-x
{
unsigned char oneShift = 1 << bitPosition;
unsigned char bitA = *numbA & oneShift;
unsigned char bitB = *numbB & oneShift;
if (bitA)
*numbB |= bitA;
else
*numbB &= (~bitA ^ oneShift);
if (bitB)
*numbA |= bitB;
else
*numbA &= (~bitB ^ oneShift);
}
为了交换A和B的位位置X,但是由于if(),我认为有更好的方法。
当我看到这个:
*numbB &= (~bitA ^ oneShift);
我真的认为有一个更简单的方法。
如果你有什么东西给我,我会拿走的:)
提前谢谢
最佳答案
首先,您应该将数字中的相应位置设置为0
,然后使用实际位或它,消除所有条件:
*numbB &= ~oneShift; // Set the bit to `0`
*numbB |= bitA; // Set to the actual bit value
另一个号码也一样。