>> Read Reply from No. 0 article  
RE: RE: RE: RE: 그럴 경우에

등록 2002-03-22 21:13:00     조회 5
이름 이민철    

		잘 기억이 나지 않아 정확한지는 모르겠지만
((a)^=(b)^=(a)^=(b)) 의 경우
xor a,b
xor b,a
xor a,b
로 작동하겠지요
a ^= b는 a와 b의 xor을 a에 대입하는 것이 아닙니다.
그리고 만약 xor 명령어 자체가 메모리가 아닌 레지스터만으로 연산한다고
해도 (잘 기억이 안나서 정확히는 답변이 안되겠네요. 하지만 가물가물한 기
억으로는 dest 쪽만 레지스터이면 될껍니다)
mov eax, a
mov ebx, b
xor eax, ebx
xor ebx, eax
xor eax, ebx
 요로코롬 되면 끝날겁니다.
((c)=(b),(b)=(a),(a)=(c)) 의 경우
말씀하신데로 6번이 되겠네요.
mov 의 경우 둘중 하나면 레지스터이면 될테니... (아닌가??? 기억이 가물가
물... 어셈한지 한 7-8년 된듯한디 emoticon)
mov eax, c
mov a, eax
mov eax, a
mov b, eax
mov eax, b
mov c, eax
  아 위의 코드들은 대충 의사코드임다.
정확한 자료가 아니라 emoticon;;
 님께서 말씀하신데로 컴파일러에 따라 많은 차이가 있겠네요 emoticon
근데 위의 xor 방식은 예전부터 속도를 위해서 많이 쓰던 방식이라 괘않은
컴파일러라면 잘 찾아서 해줄듯 한디... 잘 모르겠네엽... emoticon
 아 그리고 정말 기억이 가물가물해서 맞는지도 잘 모르겠습니다만은... 어쨌
거나 xor이 mov보다는 명령 자체만으로도 속도가 더 빨랐던 것으로 기억납니
다.
  그럼 즐프...
 : ((a)^=(b)^=(a)^=(b)) 의 경우
: mov 연산 6번에 xor 연산 3번에 사용되고
: ((c)=(b),(b)=(a),(a)=(c)) 의 경우
: mov 연산 6번 만 하면 되는 걸로 기억되는데요..
: 맞는지 틀린지는 한번 확인해 봐야 되겠군요.
: 아.. 참.. 컴파일러 마다 조금씩은 틀리겠군요.
: 제가 말한 것은 바보같은 VC++의 얘기 입니다.
:
: : 매크로를 써서 속도를 높인다면
: : 님이 생각하신 방법보다는 원문의 XOR을 이용한 것이 더욱더 빠릅니다.
: : 대입의 경우 내부적으로 mov 명령어로 처리되며 XOR의경우는 xor로 처리
됩니다.
: : mov 명령어 보다 xor 명령어가 훨씬 빠릅니다.
: :
: : 그럼 즐프...
: :
: : : 음냐.. 컴파일 되겠죠? 잘 모르겠당... emoticon;
: : : 어짜피 함수 호출하는 거는 시간 많이 걸리는 건 당연하고..
: : : 매크로를 써서 속도를 높일 거면 이 왕 하는 거 좀 더 빠르게..
: : : 요렇게 하면 연산 횟수가 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>
:
: --
: -----
이름
암호


>> 관련글
  답장 RE: RE: RE: 그럴 경우에  @.@  2002.03.22  ....
  답장 RE: RE: RE: RE: 그럴 경우에  이민철  2002.03.22  ....
  목록보기 윗글 아랫글
글쓰기
답장쓰기 수정 삭제
정규표현식 [ 상세 검색 ]
페이지로딩: [ 0.62 초 ] 작업시간: [ 0.2 초 ]

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved
[TOP]

적수네 동네
+
| 적수네 동네
| 공부방
| 리눅스 잡지 서고
| LSN 소스
| 링크 모음
+---+
게시판
+
| 떠들어보세!
| 질문과 답변
| 새소식과 정보
| 1원짜리 팁?
| 대화방
+---+
칼럼?
+
| 세하 훔쳐보기
| Welcome2nite
| 혜진의 염장판
+---+
리눅스 상표권
+
| 반대 서명란
| 토론 게시판
+---+
GNU
+
| GNU 선언문
| GNU GPL
| GNU 미러 목록
+---+
프로젝트?
+
| 리눅스카운터
| RC5DES
| 실질헌법 제작
+---+
커널 소식
+
| 안정 버젼: 2.4.14
+---+
테마 선택
+
LSN 방송국?
+
| OFF AIR
+---+
회원
+
| 로그인
+---+
[ 적수네 동네 ] [ 리눅스 상표권 독점 반대 ] [ 한글 리눅스 문서 프로젝트 ] [ KrLine ] [ 사랑넷 ] [ Valid HTML 4.0! ] [ SlashDot ] [ Freshmeat ]
Copyleft (C) 1998-2001 Byeong-Chan Kim . License
TIME: 1791048397
System by WYZsoft, HDD by I.O.Linux, Mizi Research, Embryo, WOWLINUX, Domain by SarangNet, Network by KrLine.