전체 : 4,150,784 명
어제 : 0 명
오늘 : 0 명

[TIP]swap함수 매크로 한줄로 끝내기

secretofsh | 2009.03.05 10:16 | 조회 10738
두개의 변수가 있다고 가정할때 두개의 변수값을 서로 바꾸기 위해서 일반적으로 아래와 같은 함수를 사용합니다.
swap(int *a, int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int a=3, b=4;
printf("%d,%dn",a,b);
swap(&a,&b);
printf("%d,%dn",a,b);
}

제가 소개하고자 하는것은 매크로를 이용한 swap방법입니다.
단 한줄로 swap 매크로를 정의하여 간결하게 사용할 수 있습니다.
#define swap( x, y ) { x=x^y; y=x^y; x=x^y; }
int main()
{
int a=3, b=4;
printf("%d,%dn",a,b);
swap(a,b);
printf("%d,%dn",a,b);
}
twitter facebook me2day 요즘
이런 쉬운 방법이 있었군요 +_+ 감사합니다 ㅎㅎ
이런 쉬운 방법이 있었군요 +_+ 감사합니다 ㅎㅎ
03.07 20:16 | 테디브라운님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
스와프네여.. 조으바버이니니다..
스와프네여..

조으바버이니니다..
03.14 14:29 | GD인권님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
저~ #define swap( x, y ) { x=x^y; y=x^y; ..
저~ #define swap( x, y ) { x=x^y; y=x^y; x=x^y; } 여기부분 부가 설명좀 부탁드려요 ^^;;
04.03 12:34 | 플라워o님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
^^ 기본적인 암호 알고리즘의 원리를 갖고있죠. 연산에서 사용하는 ^는 ..
^^ 기본적인 암호 알고리즘의 원리를 갖고있죠.
연산에서 사용하는 ^는 xor 연산을 말하죠
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
서로 다른 비트를 xor 할때 1을 표현합니다. 여기서 재미있는 현상은
x가 1이고 y가 0이라고 했을때
x = x(1) ^ y(0) 라고 한다면 x=1이되죠. 이결과로
y = x(1) ^ y(0) 라고 한다면 y=1이 되겠군요. 다시
x = x(1) ^ y(1) 라고 한다면 x=0이 되는군요
서로 치환이 되는 현상이 나타났죠? ㅎㅎ
지금은 한비트를 통해 설명을 해드려서 신뢰가 안가겠지만 다수의 비트를 나열해 보고 한번
저렇게 하나하나 따져가 보시면 이해가 되실겁니다 ^^
이러한 방법은 기본적인 암호 알고리즘에서도 활용됩니다^^
일반 문장이 1111 이라고 하고 이를 암호화하기 위한 키가 0011 이라고 해봅시다.
1111의 문장을 0011로 암호화를 합니다.
1111 xor 0011 = 1100
1111의 평문을 0011의 키로 암호화해서 1100의 암호문을 나타냈습니다.
다시 복호화를 해서 평문을 찾아볼까요?
1100의 암호문에 0011의 키를 통해 복호화를 해보겠습니다.
1100 xor 0011 = 1111
1111의 평문을 찾아냈죠?^^
실제 암호 알고리즘에서는 이러한 원리를 기본적으로 활용을 하고 있습니다.
물런 훨씬 복잡한 방법을 사용해서 말이죠. xor 연산은 위와같은 효과를 발휘하기 때문에 암호 알고리즘의 기본 원리로 활용되죠
04.05 00:46 | secretofsh님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
아 ^^ ! 감사합니다~

아 ^^ ! 감사합니다~

06.29 10:36 | 플라워님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
음 or 이.. 0 or 0 =00 or 1 =11 or 0 =11 or..
음 or 이..
0 or 0 =0
0 or 1 =1
1 or 0 =1
1 or 1 =1 아닌가요??

0 xor 0 =0
0 xor 1 =1
1 xor 0 =1
1 xor 1 =0 인거 같은뎅;

04.10 09:02 | 야옹이님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
야옹이님이 하신게 맞아요 ^^;;왜 저리썻지? ㅎㅎ 수정해 놔야겠군요
야옹이님이 하신게 맞아요 ^^;;왜 저리썻지? ㅎㅎ 수정해 놔야겠군요
04.10 09:37 | secretofsh님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다.
감사합니다.
11.30 20:14 | again2002님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다.
감사합니다.
11.30 20:19 | again2002님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
댓글쓰기 - 로그인한 후 댓글작성권한이 있을 경우 이용하실 수 있습니다.

비밀번호 확인

댓글 등록시에 입력했던 비밀번호를 입력해 주세요.
87개(1/5페이지)
rss
C
번호 제목 작성자 작성일 조회
87 배열설정 쉽게하기 부보 2012.12.22 2147
86 [고급]연습문제[11] 권율 2010.01.10 9660
85 [고급]C언어에서 포인터 이용한 간단한 암호 ~[8] 쫭구 2009.11.11 9478
84 [중급]BOF의 개념과 BOF를 이용한 해킹 방법[10] Ezbeat 2010.03.19 10252
83 [중급]ReadProcessMemory & WriteProcessMemory사진[8] COOLSOFT 2009.06.04 10033
82 [기초]C언어의 탄생 배경[20] COOLSOFT 2007.11.03 10136
81 [기초]비주얼 C++ 설치하기사진첨부파일[15] COOLSOFT 2007.10.27 7296
80 [기초]Microsoft Visual C++ Windows Applications by Example첨부파일[4] COOLSOFT 2009.04.03 7399
>> [기초][TIP]swap함수 매크로 한줄로 끝내기[9] secretofsh 2009.03.05 10739
78 [기초]c# 화면캡쳐프로그램 -소스포함 |첨부파일[12] 야옹이 2008.12.25 13036
77 [기초]주민번호를 만들어내는 규칙에 대해서 설명과 소스[26] COOLSOFT 2008.07.12 10297
76 [기초]윈도우 기본 창 생성 소스 -주석 포함-[7] 진혼이중주 2008.05.31 10893
75 [기초]WIN 32 API 시작하기전에 간단히 알아두기[10] 진혼이중주 2008.05.31 9485
74 [기초]c++ 강좌 #3 변수와 상수 (1)[15] 진혼이중주 2008.05.28 8985
73 [기초]C++ 강좌 #2 C++언어의 기본적인 구조[6] 진혼이중주 2008.05.28 6069
72 [기초]C++ 강좌 #1[12] 진혼이중주 2008.05.28 6849
71 [기초]리스트 자료구조의 기본적인 개념[3] 진혼이중주 2008.05.16 8037
70 [기초]두 자리 수 이상의 곱셈에 대한 알고리즘[5] 진혼이중주 2008.05.16 7276
69 [기초]Turbo 2.0 설치 및 사용법첨부파일[2] 진혼이중주 2008.05.16 8913
68 [기초]삼성 프로그래머들의 C/C++ 코딩 스타일의 지침서첨부파일[41] 진혼이중주 2008.05.05 15625
처음페이지이전 10 페이지12345다음 10 페이지마지막페이지