흔히 정렬 알고리즘 배울때 swap() 함수 많이들 쓰는데
기본적으로
temp=a
a=b
b=temp
이런식으로 단순하면서 한눈에 알아볼수있게들 많이 쓰잖아
근데 오늘 xor연산 첨 배웠는데
a^=b
b^=a
a^=b
이것도 결과는 똑같이 나오더라구
식이 너무 예쁘더라
아무튼 앞선 함수에서 temp라는 변수를 하나 더 생성하고 후자는 아니기 때문에
공간적 효율이 있는 건 알겠는데 시간적 효율도 비트 연산이 더 높은지 궁금해
흔히 정렬 알고리즘 배울때 swap() 함수 많이들 쓰는데
기본적으로
temp=a
a=b
b=temp
이런식으로 단순하면서 한눈에 알아볼수있게들 많이 쓰잖아
근데 오늘 xor연산 첨 배웠는데
a^=b
b^=a
a^=b
이것도 결과는 똑같이 나오더라구
식이 너무 예쁘더라
아무튼 앞선 함수에서 temp라는 변수를 하나 더 생성하고 후자는 아니기 때문에
공간적 효율이 있는 건 알겠는데 시간적 효율도 비트 연산이 더 높은지 궁금해
해당 댓글은 삭제되었습니다.
?? 그게 모야
직접 재보셈
구글링 결과 비트연산 개빠르데ㄷㄷ
아니 직접 재보라고
요즘 컴퓨터들은 병렬처리에 뛰어나서 오히려 XOR 스왑이 더 느림
1번은 레지스터리네이밍이나 병렬화같은 기술을 쓸 수가 있을텐데 2번은 안됨
컴파일러랑 CPU 발전이 많이 되어서 저런식으로 최적화하는거 효과없어진지 몇십년됨
1번에서 스왑한 뒤 printf("%d %d\n", a, b)를 맨 마지막에 넣으면 컴파일러가 스왑하는 코드 없애고 b, a 순서로 출력하게 만듬 출력결과는 스왑한 코드랑 동일함
그리고 검색하니까 2번은 a, b 값이 같으면 제대로 동작하지 않네
ㄴㄴ 메모리위치가 같은 경우임
이건뭔... 잘 작동한다
ㅇㅇ 주소값이 같으면