3편에서 변수와 자료형으로 값을 저장했다면, 이제는 그 값을 계산하고 비교하는 법을 익혀야 합니다. C에서는 같은 숫자 계산이라도 자료형에 따라 결과가 달라질 수 있고, 정수끼리 나누는지 실수까지 포함하는지에 따라 해석도 달라집니다. 이번 글에서는 연산자와 형 변환을 함께 보며, "왜 이 계산 결과가 이렇게 나왔는가"를 설명할 수 있는 감각을 만드는 데 집중합니다.
이번 글에서 새로 나오는 용어
- 식 (Expression): 값으로 계산될 수 있는 코드 조각 (
a + b,score >= 80등) - 산술 연산자 (Arithmetic Operator): 덧셈, 뺄셈, 곱셈, 나눗셈처럼 계산에 쓰는 연산자
- 비교 연산자 (Comparison Operator): 두 값을 비교해 참/거짓을 판단하는 연산자
- 형 변환 (Type Conversion): 한 자료형의 값을 다른 자료형처럼 바꾸어 해석하는 과정
- 캐스팅 (Casting):
(double)count처럼 개발자가 형 변환을 직접 지정하는 방법
핵심 개념
학습 메모
- 소요 시간: 45~60분
- 준비물: 변수 선언,
printf,sizeof를 사용해 본 경험- 학습 목표: 연산자 우선순위와 형 변환이 결과에 미치는 영향을 이해하기
연산자는 값을 계산하거나 비교하는 도구이고, 형 변환은 그 계산을 어떤 자료형 규칙으로 수행할지 정하는 장치입니다. 둘을 따로 떼어 보기보다 함께 이해해야 실제 코드 결과를 정확히 읽을 수 있습니다.
이번 글에서는 아래 다섯 가지를 중심으로 봅니다.
+,-,*,/,%로 기본 계산하기- 비교 연산자로 값을 비교해 참과 거짓 만들기
- 정수 나눗셈과 실수 나눗셈의 차이 이해하기
- 자동 형 변환과 명시적 캐스팅 구분하기
- 복합 대입과 증감 연산자로 값을 짧게 갱신하기
코드로 따라하기
산술 연산자로 계산하기
가장 먼저 익힐 것은 기본 계산 연산자입니다.
#include <stdio.h>
int main(void) {
int a = 12;
int b = 5;
printf("a + b = %d\n", a + b);
printf("a - b = %d\n", a - b);
printf("a * b = %d\n", a * b);
printf("a / b = %d\n", a / b);
printf("a %% b = %d\n", a % b);
return 0;
}
/는 나눗셈, %는 나머지를 구하는 연산자입니다. 특히 a / b는 둘 다 int이므로 정수 나눗셈이 되어 소수점 아래를 버립니다. 그래서 12 / 5는 2가 됩니다.
비교 연산자로 조건 만들기
비교 연산자는 다음 편의 조건문으로 바로 이어지는 핵심 도구입니다.
#include <stdio.h>
int main(void) {
int score = 85;
printf("score >= 80 -> %d\n", score >= 80);
printf("score == 100 -> %d\n", score == 100);
printf("score != 60 -> %d\n", score != 60);
return 0;
}
여기서 결과는 1 또는 0으로 출력됩니다. printf에 %d를 썼기 때문에 비교 결과도 정수처럼 보이는 것입니다. C에서는 비교 결과를 이런 정수값으로 다루는 경우가 많습니다. 보통 1은 참, 0은 거짓처럼 읽으면 됩니다.
정수 나눗셈과 실수 나눗셈
처음 배울 때 가장 많이 헷갈리는 부분이 바로 이 차이입니다.
#include <stdio.h>
int main(void) {
int total = 7;
int count = 2;
printf("int division = %d\n", total / count);
printf("float division = %.2f\n", (double)total / count);
return 0;
}
첫 번째 줄은 7 / 2를 정수 나눗셈으로 계산하므로 3이 됩니다. 두 번째 줄은 total을 double로 바꾼 뒤 계산하므로 3.50처럼 실수 결과가 나옵니다.
처음에는 아래 한 줄만 함께 기억해도 도움이 됩니다.
7 / 2 -> 3, 7.0 / 2 -> 3.5
즉, 계산식 안에 실수형이 하나라도 끼어들면 결과가 더 정밀한 실수 쪽으로 올라가는 경우가 많습니다. 다만 실제 형 변환 규칙은 자료형 조합마다 조금씩 다를 수 있으므로, 나중에 signed와 unsigned가 섞이는 경우처럼 더 복잡한 상황은 따로 주의해야 합니다.
자동 형 변환과 명시적 캐스팅
형 변환에는 컴파일러가 자동으로 하는 경우와, 개발자가 직접 지정하는 경우가 있습니다.
#include <stdio.h>
int main(void) {
int count = 3;
double price = 2.5;
double total = count * price;
double average = (double)7 / 2;
printf("total = %.1f\n", total);
printf("average = %.2f\n", average);
return 0;
}
count * price에서는 count가 자동으로 더 넓은 자료형 쪽에 맞춰 해석됩니다. 반면 (double)7 / 2는 개발자가 7을 직접 double로 바꾸라고 지정한 예시입니다.
입문 단계에서는 아래처럼 기억하면 충분합니다.
- 자동 형 변환: 계산 중 더 넓은 자료형에 맞춰 자연스럽게 바뀜
- 명시적 캐스팅: 개발자가
(double)처럼 직접 바꾸라고 지시함
복합 대입과 증감 연산자
값을 조금씩 바꿀 때는 더 짧은 표기를 쓸 수 있습니다.
#include <stdio.h>
int main(void) {
int level = 1;
level = level + 2;
printf("level = %d\n", level);
level += 3;
printf("level = %d\n", level);
level++;
printf("level = %d\n", level);
return 0;
}
level += 3은 level = level + 3과 같은 뜻이고, level++는 1을 더하는 짧은 표기입니다. 이런 표현은 다음 편 반복문에서 매우 자주 보게 됩니다. 이번 단계에서는 level++를 "값을 1 증가시키는 표기" 정도로만 이해하면 충분합니다.
초보자 단계에서는 value++ + ++value처럼 한 줄에서 증감 연산자를 여러 번 섞는 코드는 피하는 것이 좋습니다. 먼저 변수 값이 어떻게 바뀌는지 단순한 예제로 익히는 편이 안전합니다.
실전 예시: 평균 점수 계산하기
#include <stdio.h>
int main(void) {
int math = 80;
int english = 91;
int science = 87;
int total = math + english + science;
double average = (double)total / 3;
printf("total = %d\n", total);
printf("average = %.2f\n", average);
printf("average >= 85 -> %d\n", average >= 85.0);
return 0;
}
이 예제에는 덧셈, 나눗셈, 캐스팅, 비교 연산이 함께 들어 있습니다. 실제 코드는 이렇게 여러 연산이 섞여 나오는 경우가 많으므로, 한 줄씩 끊어 읽는 습관이 중요합니다.
왜 중요한가
연산자와 형 변환을 이해해야 조건문, 반복문, 함수 인자 계산이 모두 쉬워집니다. 계산 결과가 왜 바뀌는지 모르고 넘어가면, 다음 글에서 조건이 왜 참이 되고 거짓이 되는지도 흐릿해집니다.
이번 글에서 꼭 남겨야 할 핵심은 다섯 가지입니다.
- 산술 연산자는 값을 계산하고, 비교 연산자는 조건 판단 재료를 만든다.
- 정수끼리 나누면 소수점 아래가 버려질 수 있다.
- 실수형이 섞이거나 캐스팅을 하면 결과 해석이 달라질 수 있다.
+=,++같은 짧은 표기는 반복과 상태 갱신에서 자주 쓴다.- 식을 읽을 때는 "어떤 자료형으로 계산되는가"를 함께 봐야 한다.
CodeSandbox로 이어서 실습하기
아래 샌드박스는 CodeSandbox의 Universal starter입니다. C는 터미널에서 직접 컴파일하고 다시 실행하는 흐름이 중요하니, 이번 글의 코드를 파일로 만들고 빌드-실행 사이클을 다시 따라가 보세요.
💬 댓글
이 글에 대한 의견을 남겨주세요