이 영역을 누르면 첫 페이지로 이동
Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

페이지 맨 위로 올라가기

Coding Groot

코딩 블로그

[C언어] Swap하기

  • 2019.07.16 22:30
  • Programming Language/C
글 작성자: Coding Groot

프로그래밍 언어로 변수의 값은 어떻게 Swap 해야 할까?

1. Swap using temporary variable

먼저 임시 변수(temporary variable)를 사용하는 방법이 있다.
내가 int형 변수 a와 b의 값을 바꿔주고 싶다고 해보자.
int a = 3;
int b = 5;
만약에 내가
a = b의 원래 값;
b = a의 원래 값;  위와 같은 형식으로 두 변수의 값을 바꿔주려면 임시 변수가 하나 필요하다.
왜냐하면, 내가 a = b를 하는 순간 a의 원래 값은 b의 값으로 덮어씌워 져서 잃어버리기 때문이다.
내가 a = b를 하고 싶은데 a의 원래 값도 보존하고 싶다면 어떻게 해야 할까?

int temp = a;

위와 같이 임시 변수(temp)에 a값 원래 값을 저장해 놓고 a에 b값을 저장하면 된다.
이렇게 하면 나중에 a가 변형되고 난 후 a의 원래 값이 필요하게 되면 temp를 쓰면 된다.
따라서 변수 a와 b를 Swap 하는 코드는 다음과 같이 완성된다!

int a = 3;
int b = 5;

int temp = a; 	// a의 original값 임시 저장
a = b;	
b = temp;	// temp는 a의 original값!

 

2. Swap using XOR

두 번째 방법으로 XOR연산을 사용하여 Swap 하는 방법이 있다.
변수 두 개의 값을 Swap 하기 위해서는 a = b와 같이 a의 값을 바꾸는 순간 a의 원래 값을 잃어버리는 문제를 해결해야 했다.
첫 번째 방법으로 a의 원래 값을 보존하기 위해 임시 변수를 사용했지만 다른 방법은 없을까?
XOR연산을 활용하면 된다!

더보기

[참고 1] 여기에서 쓰이는 XOR연산에 대해 간단히 설명을 해 보겠다.
X XOR X = 0
X XOR 0 = X
XOR은 교환 법칙과 결합 법칙이 성립한다.

비트 연산을 잘 활용하면 a와 b의 값을 동시에 저장할 수 있다.
예를 들어서, a ^ b와 같은 값은 a와 b의 값을 동시 저장하고 있다고 볼 수 있다.
a ^ b에 (^ a) 연산을 하면 b가 나오고 a ^ b에 (^ b) 연산을 하면 a가 나온다!
(∵ a^b^a = a^a^b = 0^b = b, a^b^b = a^0 = a)

더보기

[참고 2]
C언어에서 XOR 연산자의 키워드로 '^'을 쓴다.

따라서 임시 변수 없이 Swap 코드는 다음과 같이 작성 할 수 있다.

int a = 3;	// 이때의 a값, 원래 a의 값을 a'이라 하자.
int b = 5;	// 이때의 b값, 원래 b의 값을 b'이라 하자.

a = a ^ b;
b = a ^ b;	// 좌변(a ^ b): (a'^b')^b' = (b'^b')^a' = 0^a' = a' 즉, b=a'랑 동일.
a = a ^ b;	// 좌변(a ^ b): (a'^b')^a' = (a'^a')^b' = 0^b' = b' 즉, a=b'랑 동일.

Icons made by Freepik from www.flaticon.com
반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [C언어] 소수 구하기

    [C언어] 소수 구하기

    2019.07.08
다른 글 더 둘러보기

정보

Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

  • Coding Groot의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 소개
  • 블로그 저작권

카테고리

  • 분류 전체보기 (192)
    • Git (23)
      • Git Tutorial (9)
      • Git Note (7)
      • Git Lecture (7)
    • Programming Language (1)
      • C (2)
      • C Sharp (5)
      • Java (4)
      • JavaScript (7)
      • Julia (5)
      • Python (4)
    • Programming (8)
      • Algorithm (2)
      • Compiler (5)
      • Data Structure (0)
      • Web (12)
      • NestJS (2)
    • DevOps, Infra (36)
      • Apple (6)
      • Cloud (15)
      • Database (1)
      • Network (4)
      • Linux (8)
    • Game Programming (11)
      • Unity Tutorial (5)
      • Unity Note (6)
    • Hardware Design (1)
      • Digital Circuit (1)
    • Note (53)
      • Coffee (2)
      • Retrospect (16)
      • Reading List (15)
    • Mathematics (1)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • tutorial
  • Github
  • 한빛미디어
  • javascript
  • 회고
  • git
  • aws
  • 서평
  • 전체 보기…

정보

Coding Groot의 Coding Groot

Coding Groot

Coding Groot

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기

나의 외부 링크

  • GitHub
  • SlideShare
  • 유니티 2020 수업
  • TIL Blog
  • 모도코

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. Copyright © Coding Groot.

티스토리툴바