我刚试过这个密码:

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

另一个号码也一样。

08-20 01:43