((a)^=(b)^=(a)^=(b)) 의 경우
mov 연산 6번에 xor 연산 3번에 사용되고
((c)=(b),(b)=(a),(a)=(c)) 의 경우
mov 연산 6번 만 하면 되는 걸로 기억되는데요..
맞는지 틀린지는 한번 확인해 봐야 되겠군요.
아.. 참.. 컴파일러 마다 조금씩은 틀리겠군요.
제가 말한 것은 바보같은 VC++의 얘기 입니다.
: 매크로를 써서 속도를 높인다면
: 님이 생각하신 방법보다는 원문의 XOR을 이용한 것이 더욱더 빠릅니다.
: 대입의 경우 내부적으로 mov 명령어로 처리되며 XOR의경우는 xor로 처리됩니다.
: mov 명령어 보다 xor 명령어가 훨씬 빠릅니다.
:
: 그럼 즐프...
:
: : 음냐.. 컴파일 되겠죠? 잘 모르겠당...
;
: : 어짜피 함수 호출하는 거는 시간 많이 걸리는 건 당연하고..
: : 매크로를 써서 속도를 높일 거면 이 왕 하는 거 좀 더 빠르게..
: : 요렇게 하면 연산 횟수가 9번에서 6번으로 줄 거 같은디...
: :
: : <pre>
: : #include < stdio.h >
: :
: : //#define SWAP(a, b) ((a)^=(b)^=(a)^=(b))
: : #define SWAP(a, b) ((c)=(b),(b)=(a),(a)=(c))
: : int c;
: :
: : int main(void) {
: : int a = 22;
: : int b = 44;
: :
: : SWAP(a, b);
: :
: : printf("a = %d, b = %d", a, b);
: :
: : return 0;
: : }
: : </pre>
--
-----