Что-то ужасно не так с кодом?
Да!
a^=b^=a^=b
фактически вызывает неопределенное поведение в C и C ++, потому что вы пытаетесь изменить значение a
более одного раза между двумя точками последовательности.
Попробуйте написать (хотя и не надежно)
a ^= b;
b ^= a;
a ^= b;
вместо a^=b^=a^=b
.
P.S : Никогда не пытайтесь менять значения двух переменных без использования третьей. Всегда используйте третью переменную.
РЕДАКТИРОВАТЬ :
Как @ caf заметил, что b^=a^=b
в порядке, хотя порядок вычисления аргументов оператора ^=
не указан, так как все обращения b
в выражении используются для вычисления последнее значение, которое хранится в b
, поведение четко определено.