티스토리 뷰
C언어를 주제로 한 두번째 포스팅은 정수의 교환연산에 대하여 다루어보겠습니다.
결론부터 말씀드리면 제가 아는 방법은 총 4가지입니다.
1) 다른 변수를 활용 -임시변수인 dump와 다음 세 번의 대입 연산으로 교환
2) 덧셈과 뺄셈 연산을 활용 -다음과 같이 변수 x와 y에서 덧셈 한번과 뺄셈 두 번을 다음 순서로 연산하여 교환
3) 곱셈과 나눗셈 연산을 활용 -위의 덧셈과 뺄셈 연산 방법과 비슷한 방법으로 다음과 같이 변수 x와 y에서 곱셈
한번과 나눗셈 두 번을 다음 순서로 연산하여 교환
4) 곱셈과 나눗셈 연산을 활용 -배타적 OR 연산인 XOR 연산자^을 사용하는 방법으로 다음과 같이 변수 x와 y에서
XOR(^) 연산 세 번으로 교환
예제 문제를 통하여 4가지 방법을 활용한 코딩을 해보겠습니다.
<C 예제문제 2번 - 두 정수타입 변수의 값을 교환하는 4가지 방법을 코딩하라>
해결 과정)
방법1
x = 8; y = 5; //x와 y의 값을 정의해줍니다.
int dump; //두 수를 교환해주기 위해 임시변수 dump를 정의해줍니다.
dump = x; //dump=8이 되고
x = y; //x=y이므로 y가 8이 됩니다.
y = dump; //그리고 y의 원래 값이 5이므로 5=dump가 되므로 즉, dump=5가 되고 위에서 dump=x=5
//그래서 x와 y가 변하게 됩니다.
printf("x와 y의 교환의 결과는 x=%d y=%d이다.",x,y);
방법2
int x, y;
x = 8; y = 5;
x = x + y; //x와 y를 더한값이므로 x=13이 됩니다.
y = x - y; //x=13에서 y를 빼야하므로 y=8이 됩니다.
x = x - y; //x는 13이고 y=8이므로 x는 5가 됩니다.
printf("x와 y의 교환의 결과는 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*y가 x이기 때문에 결과는 y= x
x = x / y; //(x*y /x), y는 x 이기 때문에 결과는 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*y가 x이기 때문에 결과는 y= x
x = x / y; //(x*y /x), y는 x 이기 때문에 결과는 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 |