언어/C++
C++ 두 변수를 바꾸기 위한 여러가지 방법. (임시 변수 이용, 수학적 사고 이용, xor 비트 연산자 이용)
SagacityJang
2021. 1. 4. 17:11
바꿀 수 있는 방법이 많음
임시 변수 이용
int a, b;
int t;
t = a;
a = b;
b = t;
수학적 사고 이용 ㅋㅋ
int a, b;
a = a + b;
b = a - b;
a = a - b;
xor 비트 연산자 이용
int a, b;
a = a ^ b;
b = a ^ b;
a = a ^ b;
속도를 비교해봤는데
Swap함수를 만들어서 두 변수를 파라미터로 참조하여 함수 안에서 바꾸게 하면 세개 다 속도가 비슷하게 나옴
Main(){
for( roop ){
Sawp(a,b)
}
}
Swap(int &a, int &b){
...
}
근데 함수 안쓰고 Main문 안에서 하면 속도차이가 발생함.
Main() {
for( Roop ){
...
}
}
대략 3000000000회 반복으로 돌렸을 때
임시 변수 : 6~7초
+,- 연산 : 14초
xor 연산 : 14초
정도 나옴.
임시변수쓸때는 레지스터와 메모리에 주소값 변경하는걸 내부적으로 하는것보다
메모리에 있는 변수값 레지스터에 올리고 ALU 연산하는게 속도가 더 느린건가??
그나마 swap함수 안에 넣어놓으면 int t 변수가 swap함수 메모리에 올라가는 동작때문에 비슷한건가????
왜 이런걸까.. 궁금하네
암튼 결론 : 임시변수 쓰자.