El operador ^ es bitwise-xor (ver &, |). El resultado para un par de bits es,
0 ^ 0 == 0
0 ^ 1 == 1
1 ^ 0 == 1
1 ^ 1 == 0
Entonces la expresión,
( x ^ 0x1 )
invierte / voltea el bit 0 de x (dejando otros bits sin cambios).
Considere si x puede tener valores además de 0x0 y 0x1? Cuando x es un campo de un solo bit, solo puede tener valores 0x0 y 0x1, pero cuando x es un int (char / short / long / etc), los bits además de bit0 pueden afectar el resultado de la expresión.
La expresión dada permite que los bits al lado de bit0 afecten el resultado,
if ( 0 != ( x ^ 0x1 ) )
Que tiene una veracidad equivalente a esta expresión (más simple),
if ( x ^ 0x1 )
Tenga en cuenta que esta expresión examinaría solo bit0,
if( 0x1 & ( x ^ 0x1 ) )
Entonces, la expresión presentada realmente combina dos verificaciones de expresión,
if( ( x & ~0x1 ) //look at all bits besides bit0
|| ( x ^ 0x1 ) ) //combine with the xor expression for bit0
¿El autor tenía la intención de verificar solo bit0, y tenía la intención de usar esta expresión,
if( 0x1 & ( x ^ 0x1 ) )
¿O el autor tenía la intención de combinar los valores para bit1-bitN y el xor de bit0?