10 할당 연산자와 증감 연산자 사용하기
이번 강의는 변수에 값을 대입하는 할당 연산자와 변수의 값을 증가 또는 감소시키는 증감 연산자에 대해서 정리합니다.
> // 할당 연산자와 증감 연산자: =, +=, -=, *=, /=, %=, ++, --
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) 또는 그냥 값이라고 합니다.
10.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 형태로 표시합니다.
10.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"
10.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
증가시켜 줍니다.
10.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
감소시켜 줍니다.
10.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로 표현합니다.
10.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
할당 연산자 중에는 +=
연산자 말고도 -=
, *=
, /=
, %=
등을 제공합니다.
10.8 증가, 감소 연산자 사용하기
변수의 값을 1
증가시키거나 1
감소시키는 연산자가 있습니다. 증가 또는 감소 연산자라고 하여 줄여서 증감 연산자(Increment/Decrement Operator)라고도 합니다. ++
연산자는 증가 연산자이고 --
연산자는 감소 연산자입니다. 증감 연산자는 정수형 변수의 값을 1
증가 또는 1
감소하는 기능을 하는 한 개의 항을 가지는 단항(Unary) 연산자이며, 증감 연산자가 변수 앞에 위치하느냐 뒤에 위치하느냐에 따라 연산 처리 우선순위가 결정됩니다.
증감 연산자의 종류는 다음과 같습니다.
- ++(증가 연산자): 변숫값에서 1을 더합니다.
- --(감소 연산자): 변숫값에서 1을 뺍니다.
이 강의에서 증감 연산자는 ++
증가 연산자, --
감소 연산자로 발음합니다.
10.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.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
감소시킬 수 있습니다.
10.11 전위 증감 연산자와 후위 증감 연산자
증감 연산자는 변수 앞에 붙으면 전위 증감 연산자로 부르고 변수 뒤에 붙으면 후위 증감 연산자라고 합니다.
구분 | 설명 | 코드 |
---|---|---|
전위(Prefix) 증감 연산자 | 정수형 변수의 앞에 연산자가 위치하여 변수 값을 미리 증감 후 다른 연산을 수행합니다. | ++a; --b; |
후위(Postfix) 증감 연산자 | 정수형 변수의 뒤에 연산자가 위치하여 연산식(대입)을 먼저 실행 후 나중에 변수의 값을 증감합니다. | a++; b--; |
10.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
가 됩니다.
10.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
이 대입된 상태가 됩니다.
10.14 장 요약
이번 강의는 할당 연산자인 =
, +=
, -=
, *=
, /=
, %=
과 증가 또는 감소 연산자인 ++
와 --
를 다루어 보았습니다. 계속해서 비교 연산자와 논리 연산자를 알아보겠습니다.