연산자
1. 연산식 & 연산자
1) 연산식 (expression)
- 변수와 다양한 리터럴 상수, 함수의 호출 등으로 구성되는 표현식
- 연산식은 항상 하나의 결과값을 가짐
| 3 | + | 4 |
| 피연산자 | 연산자 | 피연산자 |
| 연산식(표현식, 수식) | ||
-> 연산식의 결과값: 7
2) 연산자(operator)
+, -, *, /, %
3) 피연산자(operand)
- 연산(operation)에 참여하는 변수나 상수
2. 대입연산자
- 오른쪽 연산식 결과값을 왼쪽 변수에 저장하는 연산자
- 왼쪽 부분에는 반드시 하나의 변수만이 올 수 있음
- l-value, r-value
| var | = | exp |
| 왼쪽은 반드시 값을 저장할 수 있는 변수여야 한다 | 오른쪽은 연산식으로 결과값이 왼쪽 변수에 저장된다 |
ex.
n=2;
n=n+1; // 2+1=3을 n에 저장
n=n+3*4; // 3+3*4=15를 n에 저장
=> n의 최종 값은 15이다
3. 축약대입연산자
+=, -=, *=, /=, %=
| a | += | exp |
| a | = | a+exp |
| 연산식 a+exp의 결과가 변수 a에 저장 | 피연산자 exp는 변수 뿐만 아니라 모든 연산식이 가능 |
: 타자를 줄이기 위해 사용
| 축약대입연산자 | 풀어쓰기 | 예제 | |
| a=10, b=2인 경우, 연산 결과는? | |||
| op1+=op2 | op1=op1+op2 | a+=b+2; | 14 |
| op1-=op2 | op1=op1-op2 | a-=b+2; | 6 |
| op1*=op2 | op1=op1*op2 | a*=b+2; | 40 |
| op1/=op2 | op1=op1/op2 | a/=b+2; | 2 |
| op1%=op2 | op1=op1%op2 | a%=b+2; | 2 |
4. 증감연산자
1) 증가연산자 ++
변수명++
: 증가연산자 n++의 결과값은 증가되기 이전의 값이다
++변수명
: 증가연산자 ++는 피연산자인 변수의 값을 1 증가시켜
증가연산자 ++n의 결과값은 증가된 이후 값이다
| 출력 | VS | 출력 | ||
| int n = 10; | int n = 10; | |||
| printf("%d\n", n++); | 10 | printf("%d\n", ++n); | 11 | |
| printf("%d\n", n); | 11 | printf("%d\n", n); | 11 |
2) 감소연산자 --
변수명--
: 증가연산자 n--의 결과값은 증가되기 이전의 값이다
--변수명
: 증가연산자 --는 피연산자인 변수의 값을 1 증가시켜
증가연산자 --n의 결과값은 증가된 이후 값이다
| 출력 | VS | 출력 | ||
| int n = 10; | int n = 10; | |||
| printf("%d\n", n--); | 10 | printf("%d\n", --n); | 9 | |
| printf("%d\n", n); | 9 | printf("%d\n", n); | 9 |
5. 관계연산자
: 두 피연산자의 크기를 비교하기 위한 연산자
- 비교 결과가 참이면 1, 거짓이면 0
| 연산자 | 연산식 | 의미 | 예제 | 연산(결과)값 |
| > | x > y | x가 y보다 큰가? | 3 > 5 | 0(거짓) |
| >= | x >= y | x가 y보다 크거나 같은가? | 5-4 >= 0 | 1(참) |
| < | x < y | x가 y보다 작은가? | 'a' < 'b' | 1(참) |
| <= | x <= y | x가 y보다 작거나 같은가? | 3.43 <= 5.862 | 1(참) |
| != | x != y | x와 y가 다른가? | 5-4 != 3/2 | 0(거짓) |
| == | x == y | x와 y가 같은가? | '%' == 'A' | 0(거짓) |
: 관계연산자의 결과값은 항상 0 또는 1이다
6. 논리연산자 &&, ||, !
- &&: and
- ||: or
- !: not
- 0, 0.0, '\0'은 거짓을 의미
- 0이 아닌 모든 정수와 실수, 그리고 null 문자(\0)가 아닌 모든 문자와 문자열은 모두 참이다
| x | y | x && y | x || y | !x |
| 0(거짓) | 0(거짓) | 0 | 0 | 1 |
| 0(거짓) | 0이 아닌 값(참) | 0 | 1 | 1 |
| 0이 아닌 값(참) | 0(거짓) | 0 | 1 | 0 |
| 0이 아닌 값(참) | 0이 아닌 값(참) | 1 | 1 | 0 |
7. 조건연산자
연산자 ?
: 조건에 따라 주어진 피연산자가 결과값이 되는 삼항연산자
- x?a:b
| x | ? | a | : | b |
| x가 참(0이 아님)이면 결과값은 a | x가 거짓(0)이면 결과값은 b | |||
| x에 따라 결과는 a 또는 b이다 | ||||
8. 비트연산자
1) 비트 논리연산자
| 연산자 | 연산자 이름 | 사용 | 의미 |
| & | 비트 AND | op1 & op2 | 비트가 모두 1이면 결과는 1, 아니면 0 |
| | | 비트 OR | op1 | op2 | 비트가 적어도 하나가 1이면 결과는 1, 아니면 0 |
| ^ | 비트 배타적 OR(XOR) | op1 ^ op2 | 비트가 서로 다르면 결과는 1, 아니면 0 |
| ~ | 비트 NOT(Negation) 또는 보수(complement) | ~op1 | 비트가 0이면 결과는 1, 0이면 1으로 * 일반논리연산자의 !(NOT)과 같음 |
ex. 3 & 5
| 3 | 00000000 00000000 00000000 00000011 |
| 5 | 00000000 00000000 00000000 00000101 |
| 3 & 5 == 1 | 00000000 00000000 00000000 00000001 |
- 3과 5 모두 1일때만 1로 변환
2) 비트 보수연산자(bitwise complement operator)~
- 각 비트에서 0은 1, 1은 0이 결과가 된다
| 피연산자 | 보수 연산 | ||
| 수 | 비트표현(2진수) | 보수 연산 결과 | 10진수 |
| 1 | 00000000 00000000 00000000 00000001 | 11111111 11111111 11111111 11111110 | -1 = -2 |
| 4 | 00000000 00000000 00000000 00000100 | 11111111 11111111 11111111 11111011 | -4 = -5 |
9. 형 변환 연산자
: 자료형을 변환해주는 연산자

=> 30
ex.
| (int) 'A' | 65 |
| (int) 3.14 | 3 |
| (double) 9 | 9.0 |
| (double) 3.4F | 3.4 |
| (double) 7/2 | 3.5 * 형변환 연산자가 나누기 연산자보다 먼저 수행 ** 7/2=3이지만 double 7/2는 7.0/2가 되어 3.5가 된다 |
조건선택
조건선택: 조건에 따른 선택
1. if문
1) 조건문 if
- 조건식이 참(0이 아님)이면 문장을 실행
- 조건식이 거짓(0)이면 문장을 실행하지 않음
if(cond) // cond가 만족되면 실행
stmt;
next;
2) 예제




-> 제어문을 출력/미출력되도록 제어할 수 있는 문장
2. 조건문 if else
1) 조건에 따른 선택 지원
if (cond)
stmt1;
else
stmt2;
next;
2) 예시
if (point >= 90)
printf("A\n");
else if (point >=80)
printf("B\n");
else if (point >=70)
printf("C\n");
else if (point >=60)
printf("D\n");
else
printf("F\n");
간결한 선택 switch
1. switch문
: 연산식의 결과에 따라 여러 경로 중 하나를 선택하는 구문
switch (exp) { // 식의 결과는 문자형 또는 정수형
case value1:
stmt1;
break;
case value2: // 정수 또는 문자형의 상수
stmt2; // break를 만나면 switch문 종료
break;
case value3:
stmt3;
break;
default: // 키워드
stmt4; // 위의 case 값과 일치하는 것이 없으면 default 이후의 문장인 stmt4 실행
break; // defalut의 break는 생략 가능
}
예제1. 계절
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int month;
printf("월(month) 입력: ");
scanf("%d", &month);
switch (month) {
case 3: case 4: case 5:
printf("%d월은 봄입니다\n", month);
break;
case 6: case 7: case 8:
printf("%d월은 여름입니다\n", month);
break;
case 9: case 10: case 11:
printf("%d월은 가을입니다\n", month);
break;
case 12: case 1: case 2:
printf("%d월은 겨울입니다\n", month);
break;
default:
printf("월(month)을 잘못 입력했습니다.\n");
}
return 0;
}


예제2. 점수에 따른 성적 부여
| 점수 범위 | (int)(score/10) 연산값 | 성적 처리 |
| 90<=점수<=100 | 9또는 10 | A |
| 80<=점수<=90 | 8 | B |
| 70<=점수<=80 | 7 | C |
| 60<=점수<=70 | 6 | D |
| 점수<60 | 그 이하 | F |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int score;
printf("점수(0에서 100사이) 입력: ");
scanf("%d", &score);
if (score < 0 || score > 100) {
printf("점수 입력이 잘못되었습니다\n");
return 0;
}
switch (score / 10) {
default:
printf("점수 %d점으로 성적은 %c 입니다.", score, 'F');
break;
case 10: case 9:
printf("점수 %d점으로 성적은 %c 입니다.", score, 'A');
break;
case 8:
printf("점수 %d점으로 성적은 %c 입니다.", score, 'B');
break;
case 7:
printf("점수 %d점으로 성적은 %c 입니다.", score, 'C');
break;
case 6:
printf("점수 %d점으로 성적은 %c 입니다.", score, 'D');
break;
}
}

* C 언어는 산술연산자, 대입연산자, 증감연산자, 관계연산자, 논리연산자 등 다양한 연산자 제공
* C 언어는 정수의 비트 표현에 대한 논리 연산자 등을 제공
'AI > 컴퓨터C프로그래밍' 카테고리의 다른 글
| 컴퓨터C프로그래밍 06 배열 (0) | 2025.10.09 |
|---|---|
| 컴퓨터C프로그래밍 05 반복 (0) | 2025.10.07 |
| 컴퓨터C프로그래밍 03 C 프로그래밍 기초 (0) | 2025.10.06 |
| 컴퓨터C프로그래밍 02 C 프로그래밍 첫걸음 (0) | 2025.10.06 |
| 컴퓨터C프로그래밍 01 C 언어 개요와 개발환경 설치 (0) | 2025.10.05 |