, если вы стремитесь как можно быстрее сгенерировать код (или сэкономить память), сложные методы XOR или add - не лучший выбор:
Рассмотрим:
void swap1(int *a, int *b)
{
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
void swap2(int *a, int *b)
{
int c = *a;
*a = *b;
*b = c;
}
и результирующий код: X86
swap1:
mov eax, DWORD PTR [rdi]
xor eax, DWORD PTR [rsi]
mov DWORD PTR [rdi], eax
xor eax, DWORD PTR [rsi]
mov DWORD PTR [rsi], eax
xor DWORD PTR [rdi], eax
ret
swap2:
mov eax, DWORD PTR [rdi]
mov edx, DWORD PTR [rsi]
mov DWORD PTR [rdi], edx
mov DWORD PTR [rsi], eax
ret
Таким образом, без временной переменной вы не экономите память, а замедляете алгоритм.Какой смысл?