"XOR 교체 알고리즘"의 두 판 사이의 차이

 
(사용자 2명의 중간 판 4개는 보이지 않습니다)
3번째 줄: 3번째 줄:
;XOR 교체 알고리즘, XOR 스왑 알고리즘
;XOR 교체 알고리즘, XOR 스왑 알고리즘
* 임시 변수를 두지 않고, 두 변수를 배타적 논리합(XOR) 비트 연산을 이용하여 교체하는 알고리즘
* 임시 변수를 두지 않고, 두 변수를 배타적 논리합(XOR) 비트 연산을 이용하여 교체하는 알고리즘
* 추가 메모리 공간이 필요없으나, 임시변수 사용하는 방법보다 느림
* 추가 메모리 공간이 필요없다는 장점이 있다.
* 특수한 상황이 아니라면 권장되지 않음
* 그렇지만 특별한 상황이 아니라면 권장되지 않는다.


https://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/XOR_Swap.svg/440px-XOR_Swap.svg.png
[[파일:XOR_Swap.svg|440px]]


==코드 예제==
==잘 안쓰는 이유==
;C언어
* (성능) 모던 CPU 아키텍처에서 임시변수를 사용하는 방법보다 느리다.
<source lang='c'>
:XOR 기법은 CPU 인스트럭션간 강한 의존성(순서)가 있어 병렬처리 효율을 떨어뜨린다.
void xor_swap(int *x, int *y)
* (역사) 컴퓨터 그래픽 한정이기 하나, 미국특허(US4197590)로 등록이 된 바 있다.
{
    if (x != y) {
        *x ^= *y;
        *y ^= *x;
        *x ^= *y;
    }
}
</source>
<source lang='c'>
if (*x != *y) *x ^= *y ^= *x ^= *y;
</source>
 
;PHP
<source lang='PHP'>
function xor_swap(&$a, &$b) {
    $a = $a ^ $b;
    $b = $a ^ $b;
    $a = $a ^ $b;
}
</source>
<source lang='PHP'>
$a ^= $b ^= $a ^= $b;
</source>


==같이 보기==
==같이 보기==
*[[함수 swap()]]
* [[함수 swap()]]
*[[함수 xor_swap()]]
* [[함수 xor_swap()]] - XOR 교체 알고리즘 구현
*[[XOR]]
* [[XOR]]


==참고 자료==
==참고==
*https://en.wikipedia.org/wiki/XOR_swap_algorithm
* {{영어위키백과|XOR swap algorithm}}


[[분류: 알고리즘]]
[[분류: 알고리즘]]

2021년 11월 19일 (금) 02:19 기준 최신판

1 개요[ | ]

XOR swap algorithm
XOR 교체 알고리즘, XOR 스왑 알고리즘
  • 임시 변수를 두지 않고, 두 변수를 배타적 논리합(XOR) 비트 연산을 이용하여 교체하는 알고리즘
  • 추가 메모리 공간이 필요없다는 장점이 있다.
  • 그렇지만 특별한 상황이 아니라면 권장되지 않는다.

XOR Swap.svg

2 잘 안쓰는 이유[ | ]

  • (성능) 모던 CPU 아키텍처에서 임시변수를 사용하는 방법보다 느리다.
XOR 기법은 CPU 인스트럭션간 강한 의존성(순서)가 있어 병렬처리 효율을 떨어뜨린다.
  • (역사) 컴퓨터 그래픽 한정이기 하나, 미국특허(US4197590)로 등록이 된 바 있다.

3 같이 보기[ | ]

4 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}