Оператор ^ является побитовым xor (см. &, |). Результат для битовой пары:
0 ^ 0 == 0
0 ^ 1 == 1
1 ^ 0 == 1
1 ^ 1 == 0
Итак, выражение,
( x ^ 0x1 )
инвертирует / переворачивает 0-й бит x (оставляя остальные биты без изменений).
Подумайте, может ли x иметь значения помимо 0x0 и 0x1? Когда x является однобитовым полем, оно может иметь только значения 0x0 и 0x1, но когда x является целым (char / short / long / etc), биты, кроме bit0, могут влиять на результат выражения.
Выражение в том виде, в котором оно дано, позволяет битам около бит 0 влиять на результат,
if ( 0 != ( x ^ 0x1 ) )
Который имеет эквивалентную правдивость как это (более простое) выражение,
if ( x ^ 0x1 )
Обратите внимание, что это выражение будет проверять только бит 0,
if( 0x1 & ( x ^ 0x1 ) )
Таким образом, выражение в том виде, в котором оно представлено, действительно объединяет две проверки выражения,
if( ( x & ~0x1 ) //look at all bits besides bit0
|| ( x ^ 0x1 ) ) //combine with the xor expression for bit0
Намерен ли автор проверять только бит 0 и намеревался использовать это выражение,
if( 0x1 & ( x ^ 0x1 ) )
Или автор намеревался объединить значения для bit1-bitN и xor для bit0?