AI/컴퓨터C프로그래밍

컴퓨터C프로그래밍 04 연산자와 조건

Ayel 2025. 10. 6. 22:17

 

 

연산자

 

 

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 언어는 정수의 비트 표현에 대한 논리 연산자 등을 제공