티스토리 뷰

C언어를 주제로 한 두번째 포스팅은 정수의 교환연산에 대하여 다루어보겠습니다.

 

결론부터 말씀드리면 제가 아는 방법은 총 4가지입니다.

 

1) 다른 변수를 활용 -임시변수인 dump와 다음 세 번의 대입 연산으로 교환

 

2) 덧셈과 뺄셈 연산을 활용 -다음과 같이 변수 xy에서 덧셈 한번과 뺄셈 두 번을 다음 순서로 연산하여 교환

 

3) 곱셈과 나눗셈 연산을 활용 -위의 덧셈과 뺄셈 연산 방법과 비슷한 방법으로 다음과 같이 변수 xy에서 곱셈

한번과 나눗셈 두 번을 다음 순서로 연산하여 교환

 

4) 곱셈과 나눗셈 연산을 활용 -배타적 OR 연산인 XOR 연산자^을 사용하는 방법으로 다음과 같이 변수 xy에서

XOR(^) 연산 세 번으로 교환

 

예제 문제를 통하여 4가지 방법을 활용한 코딩을 해보겠습니다.

 

<C 예제문제 2번 - 두 정수타입 변수의 값을 교환하는 4가지 방법을 코딩하라>

해결 과정)

방법1

x = 8; y = 5;    //xy의 값을 정의해줍니다.

int dump;       //두 수를 교환해주기 위해 임시변수 dump를 정의해줍니다.

dump = x;      //dump=8이 되고

x = y;            //x=y이므로 y8이 됩니다.

y = dump;      //그리고 y의 원래 값이 5이므로 5=dump가 되므로 즉, dump=5가 되고 위에서 dump=x=5

                   //그래서 xy가 변하게 됩니다.

printf("xy의 교환의 결과는 x=%d y=%d이다.",x,y);

 

방법2

int x, y;

x = 8; y = 5;

x = x + y;             //xy를 더한값이므로 x=13이 됩니다.

y = x - y;              //x=13에서 y를 빼야하므로 y=8이 됩니다.

x = x - y;              //x13이고 y=8이므로 x5가 됩니다.

printf("xy의 교환의 결과는 x=%d y=%d이다.", x, y);

 

방법3

printf("\n방법 3\nx = %d, y = %d", x, y);

x = x * y;

y = x / y;              //(x*y /y), x*yx이기 때문에 결과는 y= x

x = x / y;               //(x*y /x), yx 이기 때문에 결과는 x=y

printf("\nx = %d, y = %d", x, y);

 

방법4

//비트단위로 바꾸어 XOR연산 진행한다.

int x = 8;                      // x = 8이라 하자 0000 1000

int y = 5;                      // y = 5이라 하자 0000 0101

printf ("%d %d", x, y);      //2진수로 바꾸었을 때 같으면 0, 다르면 1이다.

x = x^y; //0000 1101

y = x^y; //0000 1000.      //비트단위로 나누지 않고 해도 된다. ((x^y)^y) == (x^(y^y)) == (x^0) == x

x = x^y; //0000 0101       //((x^y)^x) == (y^(x^x)) ==.(y^0) == y

                                   //같은 숫자로 돌아온다.

printf("\n");

printf( "%d %d", x, y);

return 0;

}

 

전체 코드)

 

#include <stdio.h>

int main(void) {

int x = 8;

int y = 5;

int tmp = 0;

printf("\n방법 1\nx = %d, y = %d", x, y);

tmp = x;

x = y;

y = tmp;

printf("\nx = %d, y = %d", x, y);

printf("\n방법 2\nx = %d, y = %d", x, y);

x = x + y;

y = x - y;

x = x - y;

printf("\nx = %d, y = %d", x, y);

printf("\n방법 3\nx = %d, y = %d", x, y);

x = x * y;

y = x / y; //(x*y /y), x*yx이기 때문에 결과는 y= x

x = x / y; //(x*y /x), yx 이기 때문에 결과는 x=y

printf("\nx = %d, y = %d", x, y);

printf("\n방법 4\nx = %d, y = %d", x, y);

x = x ^ y;

y = x ^ y;

x = x ^ y;

printf("\nx = %d, y = %d", x, y);

return 0;

}

 

결과 콘솔)

'Language > C' 카테고리의 다른 글

C - 전위 연산 & 후위 연산  (0) 2021.01.27
C - Pointer & Array, 포인터와 배열  (0) 2021.01.27
C - Array&ForLoop, 배열과 포문  (0) 2021.01.27
C - Basic(scanf, printf, if, else if), 기본함수  (0) 2021.01.27
C - intro  (0) 2021.01.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함