----------------------------------------------------------
내가 아이에게 말했던 것은 무엇인가..
그것은 성공이라는 결과가 아닌..
치열함이 묻어나는 과정이었지..
그리고 앞으로의 전진..
무엇을 배워나가며 앞으로 걸어갈 것인가..
일어서자..
일어나야돼.... [록키발보아 중에서]
----------------------------------------------------------
----------------------------------------------------------
내가 아이에게 말했던 것은 무엇인가..
그것은 성공이라는 결과가 아닌..
치열함이 묻어나는 과정이었지..
그리고 앞으로의 전진..
무엇을 배워나가며 앞으로 걸어갈 것인가..
일어서자..
일어나야돼.... [록키발보아 중에서]
----------------------------------------------------------
1. b ^= a; a ^= b; b ^=
1. b ^= a; a ^= b; b ^= a;
2. b = a - b; a -= b; b += a;
3. b가 0이 아닐경우
b = a / b; a /= b; b *= a;
음;; 좀더 창의 적으로 생각했으면, 스스로도 알만한거였을 것 같습니다.
역시.. 우물안의 개구리라; 조금만 더 넓게 보면, 다양한 방법이 있는데, 그것을 찾지 못한것 같습니다.
아직 어린데도 불구하고 머리는 굳어 있는것 같습니다.
답변 정말 감사합니다...
Re:
a == b 인 경우
a 나 b 중에 하나가 0 인 경우
a 나 b 중에 하나가 음수이고 다른 수가 양수인 경우
a 나 b 가 int 타입이 아닌 float 나 double 인 경우
유효한 방법인지 고민해 보시기를...
대부분의 코딩에 있어서
분명하고(아무리 나중에 다시 본다고 하더라도) 포터블(portable)한 코드가 좋은 코드입니다.
값을 서로 바꾸는 코드도 여러 가지 방법이 있지만 가장 간단한 방법이 역시 제일 좋습니다.
어떤 코드가 굉장히 많이 불릴 일이 없다면 가장 이해하기 쉽고, 버그를 쉽게 찾아 낼수 있는 코드가 더 좋은 거죠.
참고로 그런 "기발한" 방법은 실제로는 느립니다
그냥 재미로 알아두면 좋지만 실제 코드에서는 안 쓰는 게 좋습니다. a와 b 변수 사이에 data dependency가 걸려 버리기 때문에 컴파일러가 최적화하기도 힘들고 CPU도 삽질하게 됩니다.
일반적인 swap인 다음
일반적인 swap인 다음 코드에서도
t = a;
a = b;
b = t;
a와 b 사이에는 data dependency가 생깁니다.
a = a + b;b = a - ba = a -
a = a + b;
b = a - b;
a = a - b;
:)
이 방법...
이 방법도 괜찮네요 ^ㅡ^ㅋㅋ
----------------------------------------------------------
내가 아이에게 말했던 것은 무엇인가..
그것은 성공이라는 결과가 아닌..
치열함이 묻어나는 과정이었지..
그리고 앞으로의 전진..
무엇을 배워나가며 앞으로 걸어갈 것인가..
일어서자..
일어나야돼.... [록키발보아 중에서]
----------------------------------------------------------
----------------------------------------------------------
내가 아이에게 말했던 것은 무엇인가..
그것은 성공이라는 결과가 아닌..
치열함이 묻어나는 과정이었지..
그리고 앞으로의 전진..
무엇을 배워나가며 앞으로 걸어갈 것인가..
일어서자..
일어나야돼.... [록키발보아 중에서]
----------------------------------------------------------
이식성과 의존성,
이식성과 의존성, 최적화를 고려하며, 일반적인 swap 함수만한 답을 찾는 것은 어렵습니다.
- 죠커's blog / HanIRC:#CN
- 죠커's blog / HanIRC:#CN
한개의 명령으로.
진지하게 듣지 마시고...
어셈블리코드로 하면 1개로 될까요?
x86 machine이고, 상황이 아름답다면,
asm XCHG a, b
맞나??
뭔가 좀 된글이라 답변하기 그렇지만..
보통 쓰는 swap함수는 대부분의 경우 t라는 임시변수를 스택에 만들어서 사용하지 않고 레지스터만 이용하게 최적화 됩니다. 따라서 실제로 해 보면 XOR이나 덧셈과 뺄셈을 이용하는 swap보다 빠르다고 알고 있네요
댓글 달기