연산자
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프로그래밍 03 C 프로그래밍 기초 (0) | 2025.10.06 |
---|---|
컴퓨터C프로그래밍 02 C 프로그래밍 첫걸음 (0) | 2025.10.06 |
컴퓨터C프로그래밍 01 C 언어 개요와 개발환경 설치 (0) | 2025.10.05 |
컴퓨터C프로그래밍 00 C 언어 개발환경 설치 (0) | 2025.10.05 |