본문 바로가기
Programming/C

C언어 4. 연산자

by Rayched 2022. 8. 6.

이번에 공부한 것은 연산자이다.

C언어에서 사용되는 연산자는 산술 연산을 수행하는 '산술 연산자', 크기 비교의 역할을 하는 '비교 연산자'

논리적인 연산을 수행하는 '논리 연산자'로 구분된다.

 

① 산술 연산자

- 사칙연산을 다루는 연산자, 기본적이고 가장 많이 사용되는 연산자

- 두 개의 피연산자를 가지는 이항 연산자로, 결합 방향은 '왼쪽→오른쪽'이다.

  • a + b : a에 b를 더한다.
  • a - b : a에 b를 뺀다.
  • a * b : a와 b를 곱한다.
  • a / b : a를 b로 나눈다.
  • a % b : a와 b를 나눈 후 나머지를 구한다.

산술 연산자의 종류로 무엇이 있는 지를 확인했으니, 이제 이것을 참고해서 코드를 작성해보자.

#include <stdio.h>

int main (void) {
 int a = 10;
 int b = 5;
 
 printf("=== 산술 연산자 예시 문제 ===/n");
 printf("a + b = %d\n", a+b); //a에 b를 더한다.
 printf("a - b = %d\n", a-b); //a에 b를 뺀다.
 printf("a * b = %d\n", a*b); //a에 b를 곱한다.
 printf("a / b = %d\n", a/b); //a를 b로 나눈다.
 printf("a %% b = %d", a%b); //a를 b로 나누고, 나머지를 구한다.
 printf("=== 산술 연산자 문제 종료 ===");
 
 return 0;
 }
 
 /* 예상 출력
  * a + b = 15
  * a - b = 5
  * a * b = 50
  * a / b = 2
  * a % b = 0 (a를 b로 나눴을 때 몫은 2이고, 나머지는 0이므로 출력되는 정수도 0이다.)
  */

위와 같은 코드를 작성한 다음, 프로그램을 실행해보자.

아래와 같은 연산 결과가 나오면 성공적으로 코드를 작성한 것이다.

② 증감 연산자

- 변수에 저장된 값을 1씩 증가시키거나, 감소시키는 역할을 하는 연산자

- 증감 연산자는 연산자가 붙는 위치가 어디냐에 따라 전위와 후위로도 나눌 수 있으며

  프로그램을 실행시키면 서로 다른 출력 값이 나온다.

 (1). 전위 연산자

  - 변수에 저장된 값을 먼저 증가 또는 감소시킨 후에 값을 출력하는 연산자

  • '++' a : 변수 a의 값을 1 증가시킨 후 값을 출력한다.
  • '--'  a : 변수 a의 값을 1 감소시킨 후 값을 출력한다.

 (2). 후위 연산자

  - 변수에 저장된 값을 먼저 출력한 후에 값을 증가 또는 감소시키는 연산자

  • a '++' : 변수 a의 현재 값을 출력한 후, 값을 1 증가시킨다.
  • a '--' : 변수 a의 현재 값을 출력한 후, 값을 1 감소시킨다.

전위 연산자와 후위 연산자에 대한 개념을 좀 더 정확하게 이해하기 위해서 코드를 작성하고, 결과를 확인해보자.

//전위, 후위 연산자 예시

#include <stdio.h>

int main(void) {
 int a = 4; //정수형 변수 a를 선언, 값을 4로 지정
 int b = 6; //정수형 변수 b를 선언, 값을 6으로 지정
 
 int A = 7; //정수형 변수 A를 선언, 값을 7로 지정
 int B = 9; //정수형 변수 B를 선언, 값을 9로 지정
 
 printf("=== 전위 연산자 예시 ===\n");
 printf("++a = %d\n", ++a); //변수 a의 값을 먼저 증가시킨 후 출력함, a = 5
 printf("--b = %d\n", --b); //변수 b의 값을 먼저 감소시킨 후 출력함, b = 5
 printf("a = %d\n", a); //변수 a의 현재 값을 출력, a = 5
 printf("b = %d\n", b); //변수 b의 현재 값을 출력, b = 5
 
 printf("=== 후위 연산자 예시 ===\n"); 
 printf("A++ = %d\n", A++); //변수 A의 값을 출력 후, 증가시킴, A = 7
 printf("B-- = %d\n", B--); //변수 B의 값을 출력 후, 감소시킴, B = 9
 printf("A = %d\n", A); //변수 A의 현재 값을 출력, A = 8
 printf("B = %d", B); //변수 B의 현재 값을 출력, B = 8
 
 return 0;
}

위와 같은 코드를 작성하고, 프로그램을 실행시키면 아래와 같은 출력 결과가 나온다.

전위 연산자, 후위 연산자 예시 출력 결과

③ 비교 연산자

- 비교 연산자는 두 피연자의 값의 관계를 비교하기 때문에 '관계 연산자'라고도 한다.

- 두 값이 같은지, 다른지, 큰지(초과), 작은지(미만), 크거나 같은지(이상), 작거나 같은지(이하) 등을 비교하는 연산자

  • a '==' b : a는 b와 같다.
  • a '!=' b : a는 b와 같지 않다.
  • a '>' b : a는 b보다 크다. (초과)
  • a '<' b : a는 b보다 작다. (미만)
  • a '>=' b : a는 b보다 크거나 같다. (이상)
  • a '<=' b : a는 b보다 작거나 같다. (이하)

비교 연산자가 뭐가 있는지 알았으니, 이를 활용해서 예시 코드를 하나 만들어보겠다.

#include <stdio.h>

int main(void) {
 int A = 7;
 int B = 5;
 
 printf("=== 비교 연산자 예시 ===\n");
 
 printf("%d\n", A == b);
 printf("%d\n", A != b);
 
 printf("%d\n", A > b);
 printf("%d\n", A < b);
 
 printf("%d\n", A >= b);
 printf("%d", A <= b);
 
 return 0;
}
//제시된 조건이 참일 경우에 출력이 1
//거짓일 경우에는 출력이 0으로 나올 것이다.

위와 같은 코드를 작성하고 프로그램을 실행시키면 아래와 같은 출력이 나온다.

왜 이런 출력 결과가 나왔을까?

C언어에서 참과 거짓은 숫자 1, 0으로 표현된다. Java에서는 'True'와 'False'로 표시된 것과는 다른 모습이다.

참인 경우에는 '1', 거짓인 경우에는 '0'으로 표현되기 때문에 이를 바탕으로 위의 비교 연산자 예시를 확인해보자.

  • A == B (A와 B가 같다.): 변수 A의 값은 7, B의 값은 5로 서로 다른 값이므로 거짓(0)
  • A != B (A와 B는 같지 않다.): 변수 A, B에 입력된 값이 서로 다르므로 참(1)
  • A > B (A가 B보다 크다.): 변수 A에 입력된 값이 더 크기 때문에 참(1)
  • A < B (A가 B보다 작다.): 변수 A에 입력된 값이 더 크기 때문에 거짓(0)
  • A >= B (A가 B보다 크거나 같다.): A=7, B=5, 참(1)
  • A <= B (A가 B보다 작거나 같다.): A=7, B=5, 거짓(0)

비교 식이 참일 경우에는 정수 1로, 거짓이면 0이기 때문에 출력 결과가 '0, 1, 1, 0, 1, 0'으로 나온다면

정상적으로 코드를 작성한 것이다.

 

④ 논리 연산자

 - 참과 참(1, 1), 거짓과 거짓(0, 0), 참과 거짓('0, 1' 또는 '1, 0') 등을 논리 연산할 때 사용하는 연산자

  • a '&&' b : AND, 그리고, a와 b 양쪽을 확인해서 둘다 참(1) 일 경우에만 결과가 참이 된다.
  • a '||' b : OR, 또는, a와 b 양쪽을 확인해서 둘 중 하나의 참이면 결과도 참이 된다.

AND와 OR 연산자 보충 설명

(1). AND 연산자

 - 입력 A, B가 둘다 참(1)일 때만 출력 C가 참(1)이 된다.

 - 수식으로 표현하면 'A * B = C'로 표현할 수 있다.

입력 출력
A B C
0 0 0
0 1 0
1 0 0
1 1 1

▲ AND 연산자 진리표

(2). OR 연산자

  - 입력 A, B 둘 중 하나가 참이어도, 출력 C가 참(1)이 된다.

  - 수식으로 표현하면 'A + B = C'로 표현할 수 있다.

입력 출력
A B C
0 0 0
0 1 1
1 0 1
1 1 1

▲ OR 연산자 진리표


 

산술, 비교, 논리 연산자의 개념을 알았다.

마지막으로 비교 연산자와 논리 연산자를 활용해서 문제를 하나 만들어보겠다.

//예제: 비교 연산자와 논리 연산자를 활용해서 문제를 만들어보기
//2022년 8월 6일 일요일 작성

#include <stdio.h>

int main(void) {
	int A = 15;
	int B = 17;
	int C = 19;

	printf("=== 연산자 예제 시작 ===\n");
	printf("[AND 연산자 예시]\n");
	printf("%d\n", A > B && A == B); // 0 && 0 => 0
	printf("%d\n", B > C && A != B); // 0 && 1 => 0
	printf("%d\n", A < B && A > C); // 1 && 0 => 0
	printf("%d\n", B != C && A < C); // 1 && 1 => 1

	printf("[OR 연산자 예시]\n");
	printf("%d\n", A >= B || A == C); // 0 || 0 => 0
	printf("%d\n", B == C || A != C); // 0 || 1 => 1
	printf("%d\n", B <= C || B >= C); // 1 || 0 => 1
	printf("%d\n", A <= B || B <= C); // 1 || 1 => 1
	printf("=== 연산자 예시 종료 ===");
	return 0;
}

해당 코드는 AND, OR 연산자의 진리표를 참고해서 작성한 코드이다.

과연 예상한 결과가 나오는지 확인하기 위해서 프로그램을 실행시켜보자.

연산자 예시 문제 출력 결과

 

'Programming > C' 카테고리의 다른 글

C언어 5. 자료형 & 서식지정자  (0) 2022.08.12
C언어 3. 상수  (0) 2022.08.05
C언어 2. 변수  (0) 2022.07.27
C언어 1. C언어 등장 배경 및 특징  (0) 2022.07.18