C - Troque um pouco entre dois números

Eu apenas tentei com este código:

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

para trocar a posição de bits x de aeb, mas por causa do if () acho que há algo melhor.

Além disso, quando vejo isso:

*numbB &= (~bitA ^ oneShift);

Eu realmente acho que existe uma maneira mais fácil de fazer isso. Se você tem algo para mim, eu aceitaria :)

desde já, obrigado

questionAnswers(3)

yourAnswerToTheQuestion