C - Cambiar un poco entre dos números

Acabo de probar con 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);
}

intercambiar la posición de bit x de a y b pero debido a if () creo que hay algo mejor.

También cuando veo esto:

*numbB &= (~bitA ^ oneShift);

Realmente creo que hay una manera más fácil de hacerlo. Si tienes algo para mí, lo tomaría :)

Gracias por adelantado

Respuestas a la pregunta(3)

Su respuesta a la pregunta