10. 할당 연산자와 증감 연산자 사용하기
이번 강의는 변수에 값을 대입하는 할당 연산자와 변수의 값을 증가 또는 감소시키는 증감 연산자에 대해서 정리합니다.
> // 할당 연산자와 증감 연산자: =, +=, -=, *=, /=, %=, ++, --
1. 할당 연산자(Assignment Operator)
할당 연산자(Assignment Operator)는 변수에 데이터를 대입하는데 사용됩니다. 할당 연산자는 대입 연산자로도 부릅니다. =
기호는 C 언어에서 같다는 의미가 아니라 오른쪽에 있는 값 또는 식의 결과를 왼쪽 변수에 할당하는 걸 지시합니다.
할당 연산자의 종류는 다음과 같습니다.
=, +=, -=, *=, /=, %=
다음은 할당 연산자의 사용 예입니다.
A = B
- 변수
A
에 변수B
의 값을 할당합니다.
- 변수
A = A + B
와A += B
A
에B
를 더한 후, 그 값을 다시A
에 할당합니다.
A = A - B
와A -= B
A
에서B
를 뺀 후, 그 값을 다시A
에 할당합니다.
NOTE
age = 21
형태의 식에서 age를 좌측값(lvalue) 또는 오브젝트라고 하고 21을 우측값(rvalue) 또는 그냥 값이라고 합니다.
2. 할당 연산자 사용하기
지금까지 우리가 사용해 온 변수 선언 후 초기화할 때 사용한 =
연산자가 바로 데이터를 할당하는 할당 연산자입니다. char
데이터 타입으로 문자 하나를 보관하듯이 char*
데이터 타입을 사용하면 문자열을 보관할 수 있습니다.
코드: assignment_operator.c
//[?] 할당(대입) 연산자: 변수에 특정 데이터 타입에 특정 값으로 초기화
#include <stdio.h>
int main(void)
{
char* name = "C 언어"; // name 변수에 문자열을 대입합니다.
char* version = "C2x"; // version 변수에 문자열을 대입합니다.
printf("%s - %s\n", name, version);
return 0;
}
C 언어 - C2x
처음 나오는 내용이지만, char*
데이터 타입을 사용하여 문자열을 대입(할당)해서 사용할 수있습니다. C 언어의 버전은 C99, C11, C17 형태로 년도에 맞는 버전을 표시합니다. 최신 버전의 C 언어는 C2x 형태로 표시합니다.
3. 변숫값 서로 바꾸기
프로그래밍을 하다보면 변수의 값을 서로 변경할 필요가 있을 수 있습니다. 이러한 경우에는 일반적으로 임시 변수를 하다 더 두고 이곳에 먼저 나온 데이터를 임시 보관하는 식으로 데이터를 바꿀 수 있습니다.
코드: swap_demo.c
#include <stdio.h>
int main(void)
{
int i = 100;
int j = 200;
int temp;
printf("처음: %d, %d\n", i, j); // 100, 200
//[?] 변숫값 서로 바꾸기
temp = i; //[A] 임시 변수에 i 값 담기
i = j; //[B] i 값에 j 값으로 덮어쓰기
j = temp; //[C] j에 i 값이 담겨 있던 temp 값으로 덮어쓰기
printf("변경: %d, %d\n", i, j); // 200, 100
return 0;
}
처음: 100, 200
변경: 200, 100
실행 결과는 다음 의사 코드를 참고하세요.
(1) i
와 j
에 각각 100
과 200
을 넣고 출력해 봅니다.
> int i = 100;
> int j = 200;
> $"처음: {i}, {j}"
"처음: 100, 200"
(2) i
와 j
의 값을 변경하려면 임시 변수인 temp
를 두고 i
의 값을 저장합니다. 그런다음 i
에 j
를 대입 후 마지막으로 j
에 temp
를 대입합니다. 이런 과정을 거치면 두 변수의 데이터가 변경됩니다.
> int temp = i; //[A] 임시 변수에 i 값 담기
> i = j; //[B] i 값에 j 값으로 덮어쓰기
> j = temp; //[C] j에 i 값이 담겨 있던 temp값으로 덮어쓰기
> $"변경: {i}, {j}"
"변경: 200, 100"
4. 변수의 값을 1 증가시키기
이번에는 변수의 값을 1
증가시키는 코드를 만들어보겠습니다.
코드: increment_number.c
//[?] 정수형 변수의 값을 1 증가
#include <stdio.h>
int main(void)
{
int num = 10; // 처음에는 10으로 초기화
num = num + 1; // 1 증가
printf("%d\n", num); // 11
return 0;
}
11
num = num + 1;
형태의 코드는 num
변수에 1
을 더 한 후 다시 num
변수에 할당하여, 최종적으로 num
변수의 값을 1
증가시켜 줍니다.
5. 변수의 값을 1 감소시키기
이번에는 변수의 값 감소 기능을 사용해보겠습니다.
코드: decrement_number.c
//[?] 정수형 변수의 값을 1 감소
#include <stdio.h>
int main(void)
{
int num = 10; // 처음에는 10으로 초기화
num = num - 1; // 1 감소
printf("%d\n", num); // 9
return 0;
}
9
num = num - 1;
형태의 코드는 num
변수에 1
을 뺀 후 다시 num
변수에 할당하여, 최종적으로 num
변수의 값을 1
감소시켜 줍니다.
char 형식 변수에 증가/감소 연산자 사용하기
char 형식의 변수에도 증가(++
) 또는 감소(--
) 연산자를 사용할 수 있습니다. char 형식의 변수는 정수 값을 저장하므로, 이를 이용하면 문자 코드에 대한 연산도 가능하게 됩니다. 이번에는 char 형식의 변수에 증가 및 감소 연산자를 사용하는 간단한 예제를 제공하고 해당 코드가 어떻게 작동하는지 설명하도록 하겠습니다.
코드: char_increment_decrement.c
#include <stdio.h>
int main(void)
{
char c = 'A';
printf("원래의 문자: %c\n", c);
// 문자 변수에 증가 연산자 사용
c++;
printf("증가 연산 후의 문자: %c\n", c);
// 문자 변수에 감소 연산자 사용
c--;
printf("감소 연산 후의 문자: %c\n", c);
return 0;
}
원래의 문자: A
증가 연산 후의 문자: B
감소 연산 후의 문자: A
이 코드에서는 char 형식의 변수 c에 증가 연산자와 감소 연산자를 사용하였습니다. 처음에 c는 'A'를 가지고 있습니다. 이때 'A'의 ASCII 코드는 65입니다. 증가 연산자를 사용하면, c의 ASCII 코드 값이 1 증가하므로, 'B'의 ASCII 코드인 66이 됩니다. 따라서 c는 'B'를 가지게 됩니다. 같은 원리로, 감소 연산자를 사용하면, c의 ASCII 코드 값이 1 감소하므로, 다시 'A'의 ASCII 코드인 65가 됩니다. 따라서 c는 다시 'A'를 가지게 됩니다. 이렇게 char 형식의 변수에 증가 또는 감소 연산자를 사용하면, 해당 변수가 가지는 문자 코드가 변경되어 다른 문자를 표현하게 됩니다. 이는 문자 코드의 순서를 이용한 연산에 유용하게 사용될 수 있습니다.
6. 할당 연산자 축약형 사용하기
할당 연산자는 +=
형태로 축약형으로 사용할 수 있습니다. 이번에는 x = x + 2;
형태를 x += 2;
형태로 축약해서 사용할 수 있는 연산자인 +=
연산자를 사용해보겠습니다.
코드: shortcut_operator.c
//[?] 할당 연산자 축약형 사용하기
#include <stdio.h>
int main(void)
{
int x = 3; // x를 3으로 초기화
int y = 3; // y를 3으로 초기화
x = x + 2; // 기본형 방식으로 2 증가
y += 2; // 축약형 방식으로 2 증가
printf("x: %d, y: %d\n", x, y); // x: 5, y: 5
return 0;
}
x: 5, y: 5
기본형과 축약형은 모두 동일하게 x
변수와 y
변수에 2
를 더해서 저장하는 기능을 합니다.
다음 두 코드는 동일한 기능을 합니다.
x = x + 2;
x += 2;
TIP
축약형(속기, 약칭, shorthand)
x = x + 1;
코드를 x += 1
로 변경해 주는 기능을 축약형이라고 하고 영어로 shorthand로 표현합니다.
7. += 연산자와 -= 연산자 함께 사용하기
A += B
와 같은 연산은 단지 A = A + B
와 같은 구문을 줄여서 사용하는 목적이 큽니다. 이처럼 C 언어에서는 개발자가 최소한의 입력으로 동일한 효과를 보여줄 수 있는 풍부한 연산자를 제공합니다.
이번에는 +=
연산자와 -=
연산자를 사용해보겠습니다.
코드: shortcut_operator_demo.c
//[?] 할당(대입) 연산자: =, +=, -=, *=, /=, %=
#include <stdio.h>
int main(void)
{
int a = 3;
int b = 5;
b += a; // 누적: b변수에 a변수의 값을 누적
printf("%d\n", b); // 8
// 현재 시점의 b는 8
b -= a; // 감산: b에서 a를 뺀 후 다시 b에 할당
printf("%d\n", b); // 5
return 0;
}
8
5
할당 연산자 중에는 +=
연산자 말고도 -=
, *=
, /=
, %=
등을 제공합니다.
8. 증가, 감소 연산자 사용하기
변수의 값을 1
증가시키거나 1
감소시키는 연산자가 있습니다. 증가 또는 감소 연산자라고 하여 줄여서 증감 연산자(Increment/Decrement Operator)라고도 합니다. ++
연산자는 증가 연산자이고 --
연산자는 감소 연산자입니다. 증감 연산자는 정수형 변수의 값을 1
증가 또는 1
감소하는 기능을 하는 한 개의 항을 가지는 단항(Unary) 연산자이며, 증감 연산자가 변수 앞에 위치하느냐 뒤에 위치하느냐에 따라 연산 처리 우선순위가 결정됩니다.
증감 연산자의 종류는 다음과 같습니다.
++
(증가 연산자): 변숫값에서1
을 더합니다.--
(감소 연산자): 변숫값에서1
을 뺍니다.
이 강의에서 증감 연산자는 ++
증가 연산자, --
감소 연산자로 발음합니다.
9. 증감 연산자인 증가 연산자 사용하기
하나의 변수의 값을 1
씩 증가시키는 연산자를 증가 연산자라고 합니다. 반대로 변수의 값을 1
씩 감소시키는 연산자를 감소 연산자라고 합니다. 이 둘을 가르켜 일반적으로 증감 연산자라고 부릅니다.
이번에는 증가 연산자를 사용해보겠습니다.
코드: increment_operator.c
//[?] 증가 연산자: 정수 자료형 변수의 값을 1 증가
#include <stdio.h>
int main(void)
{
int num = 100; // 100으로 초기화
++num; // 1 증가
printf("%d\n", num); // 101
return 0;
}
101
++num;
코드에 의해서 num
변수의 값을 1
증가시킬 수 있습니다.
10. 증감 연산자인 감소 연산자 사용하기
이번에는 정수 타입의 변수의 값을 1
감소시키는 감소 연산자를 사용해보겠습니다.
코드: decrement_operator.c
//[?] 감소 연산자: 정수 자료형 변수의 값을 1 감소
#include <stdio.h>
int main(void)
{
int num = -100;
--num; // 1 감소
printf("%d\n", num); // -101
return 0;
}
-101
--num;
코드에 의해서 num
변수의 값을 1
감소시킬 수 있습니다.
11. 전위 증감 연산자와 후위 증감 연산자
증감 연산자는 변수 앞에 붙으면 전위 증감 연산자로 부르고 변수 뒤에 붙으면 후위 증감 연산자라고 합니다.
구분 | 설명 | 코드 |
---|---|---|
전위(Prefix) 증감 연산자 | 정수형 변수의 앞에 연산자가 위치하여 변수 값을 미리 증감 후 다른 연산을 수행합니다. | ++a; --b; |
후위(Postfix) 증감 연산자 | 정수형 변수의 뒤에 연산자가 위치하여 연산식(대입)을 먼저 실행 후 나중에 변수의 값을 증감합니다. | a++; b--; |
12. 전위 증감 연산자 사용하기
전위 증감 연산자를 사용해 보겠습니다. 앞에 붙는 증감 연산자는 해당 라인에서 실행 우선순위가 가장 높습니다.
코드: prefix_operator.c
//[?] 전위(Prefix) 증감 연산자: 우선순위가 높음
#include <stdio.h>
int main(void)
{
int i = 3; // i 변수를 3으로 초기화
int j = ++i; // 3에서 4로 증가 후 j 변수에 4를 할당
printf("%d\n", j); // 4
return 0;
}
4
int j = ++i;
형태로 앞에 증가 연산자가 붙는 경우에는 i
의 값을 우선적으로 1
증가 시켜줍니다. 위 예제에서는 i
의 값이 3
에서 4
로 증가된 후 이 값이 j
에 할당되어 j
의 값이 4
가 됩니다.
13. 후위 증감 연산자 사용하기
후위 증감 연산자는 해당 라인에서 할당 연산자보다 우선순위가 낮습니다.
코드: postfix_operator.c
//[?] 후위(Postfix) 증감 연산자: 우선순위가 낮음
#include <stdio.h>
int main(void)
{
int x = 3;
int y = x++; // y에 x 대입 후, x를 1 증가
printf("%d\n", y); // 3
return 0;
}
3
int y = x++;
형태로 뒤에 증가 연산자가 붙어서 x
의 값이 3
이 먼저 y
에 할당된 후 증가가 되기에 y
변수에는 3
이 대입된 상태가 됩니다.
14. 장 요약
이번 강의는 할당 연산자인 =
, +=
, -=
, *=
, /=
, %=
과 증가 또는 감소 연산자인 ++
와 --
를 다루어 보았습니다. 계속해서 비교 연산자와 논리 연산자를 알아보겠습니다.