산술 연산자

정의

  • 사칙연산을 포함한 각종 산술연산을 수행하는 연산자
  • arithmetic operator
  • 이항 연산자 : 피연산자가 두 개인 연산자
  • 단항 연산자 : 피연산자가 한 개인 연산자

종류

구분 연산자 명칭 예시 비고
산술 + 더하기 i + 5  
산술 - 빼기 i - 5  
산술 * 곱하기 i * 5  
산술 / 나누기 i / 5  
산술 % 나눗셈의 나머지 i % 5 정수형에만 사용할 수 있음
산술 +(부호) 양수 부호    
산술 -(부호) 음수 부호 int a = -5;  
산술 ++ 1 증가 (증감 연산자) ++i, i++  
산술 1 감소 (증감 연산자) –i, i–  

예시

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <stdlib.h>

int main() {

    // 더하기, 빼기, 곱하기, 나누기  
    int i = 5;
    printf("i + 5 = %d\n", i + 5);
    printf("i - 5 = %d\n", i - 5);
    printf("i * 5 = %d\n", i * 5);
    printf("i / 5 = %d\n", i / 5);
    ------------------------------
    >> i + 5 = 10
	>> i - 5 = 0
	>> i * 5 = 25
	>> i / 5 = 1

    // 나눗셈의 나머지
    int j = 6;
    printf("j %% 5 = %d\n", j % 5);
    ------------------------------
	>> j % 5 = 1

    // 양수부호 및 음수부호
    int a = +1;
    int b = -1;
    printf("a + b = %d\n", a + b);
    ------------------------------
	>> a + b = 0

    // 증감 연산자 ++ --
    int c = 10;
    int d = c++;
    printf("d = %d, c = %d\n", d, c);
    ------------------------------
	>> d = 10, c = 11

    int e = 10;
    int f = ++e;
    printf("f = %d, e = %d\n", e, f);
    ------------------------------
	>> f = 11, e = 11

    int g = 10;
    int h = c--;
    printf("g = %d, h = %d\n", g, h);
    ------------------------------
	>> g = 10, h = 11

    int k = 10;
    int l = --e;
    printf("k = %d, l = %d\n", k, l);
    ------------------------------
	>> k = 10, l = 10

    return EXIT_SUCCESS;
}

주의 사항

(1) 오버플로가 일어나지 않도록 주의

  • 오버플로 : 해당 자료형이 담을 수 있는 범위를 벗어난 수를 저장하려고 할 때
  • 정수형의 경우 wrap-around, 실수형은 저장된 값이 Inf 혹은 0.0이 될 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// wrap-around
short i = 32768;
printf("%d\n", i + 1);
------------------------------
>> -32767

// inf
float f = FLT_MAX;
printf("%f\n", f * 2.0f);
------------------------------
>> inf

// 0.0
float fm = FLT_MIN;
printf("%f\n", fm / 10e+10);
------------------------------
>> 0.000000

(2) 나눗셈에서 제수(분모)는 0이 아니어야 한다.

1
2
3
4
short i = 32768;
printf("%d\n", i / 0);
------------------------------
>> 0

(3) 정수형 나눗셈에서 소수점 이하(나머지)는 버려진다.

1
2
3
4
5
int a = 10;
int b = 3;
printf("a / b = %d\n", a / b);
------------------------------
>> 3

(4) 정수형과 실수형간 연산의 결과는 실수형이다.

1
2
3
4
int a =1;
printf("a * b = %f\n", a * 1.5);
------------------------------
>> 1.500000

(5) 전치 연산과 후치 연산에 주의하라

  • 전치 연산 : 숫자의 증감연산이 일어난 뒤에 연산이 수행됨.
  • 후치 연산 : 연산이 수행되고 나서 증감연산이 수행됨.
1
2
3
4
5
6
7
8
9
10
11
int c = 10;
int d = c++;
printf("d = %d, c = %d\n", d, c);
------------------------------
>> d = 10, c = 11

int e = 10;
int f = ++e;
printf("f = %d, e = %d\n", e, f);
------------------------------
>> f = 11, e = 11

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments