Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

우리의 IT

C언어 - 연산자 본문

정보처리기사

C언어 - 연산자

우리의 IT 2025. 3. 26. 22:16

C 언어에서 연산자는 특정 연산을 수행하는 기호 또는 키워드입니다. 연산자는 크게 다음과 같이 분류할 수 있습니다.


1. 산술 연산자 (Arithmetic Operators)

숫자 계산을 수행하는 연산자입니다.

연산자 의미 예시 (a = 10, b = 3) 결과

+ 덧셈 a + b 13
- 뺄셈 a - b 7
* 곱셈 a * b 30
/ 나눗셈 a / b 3 (정수 나눗셈)
% 나머지 a % b 1

⚠️ 정수형 변수에서 / 연산을 하면 몫만 반환합니다. 소수점까지 구하려면 float 또는 double로 변수를 선언해야 합니다.


2. 대입 연산자 (Assignment Operators)

변수에 값을 할당하는 연산자입니다.

연산자 의미 예제 (a = 10) 결과

= 대입 a = 5 a는 5
+= 덧셈 후 대입 a += 3 a = 13
-= 뺄셈 후 대입 a -= 2 a = 8
*= 곱셈 후 대입 a *= 2 a = 20
/= 나눗셈 후 대입 a /= 5 a = 2
%= 나머지 후 대입 a %= 3 a = 1

3. 비교 연산자 (Relational Operators)

두 값을 비교하여 참(1) 또는 거짓(0)을 반환하는 연산자입니다.

연산자 의미 예제 (a = 10, b = 3) 결과

== 같음 a == b 0 (false)
!= 다름 a != b 1 (true)
> a > b 1
< 작음 a < b 0
>= 크거나 같음 a >= b 1
<= 작거나 같음 a <= b 0

4. 논리 연산자 (Logical Operators)

논리식을 판단하는 연산자입니다.

연산자 의미 예제 (a = 1, b = 0) 결과

&& AND(논리곱) a && b 0 (false)
`   ` OR(논리합)
! NOT(논리 부정) !a 0

5. 비트 연산자 (Bitwise Operators)

비트 단위로 연산하는 연산자입니다.

연산자 의미 예제 (a = 5(0101), b = 3(0011)) 결과

& 비트 AND a & b 1 (0001)
` ` 비트 OR `a
^ 비트 XOR a ^ b 6 (0110)
~ 비트 NOT ~a -6 (보수)
<< 왼쪽 시프트 a << 1 10 (1010)
>> 오른쪽 시프트 a >> 1 2 (0010)

⚠️ ~a 연산은 비트 반전(1의 보수)을 수행하며, 보수 표현법 때문에 -a-1이 됩니다.


6. 증감 연산자 (Increment and Decrement Operators)

값을 1 증가 또는 감소시키는 연산자입니다.

연산자 의미 예제 (a = 5) 결과

++a 전위 증가 b = ++a a = 6, b = 6
a++ 후위 증가 b = a++ a = 6, b = 5
--a 전위 감소 b = --a a = 4, b = 4
a-- 후위 감소 b = a-- a = 4, b = 5

🚀 전위(++a)와 후위(a++)의 차이

  • ++a는 값을 먼저 증가시키고 반환합니다.
  • a++는 기존 값을 먼저 반환하고, 이후에 증가합니다.

7. 삼항 연산자 (Ternary Operator)

조건에 따라 값을 반환하는 연산자입니다.

📌 형식:

조건식 ? 참일 때 값 : 거짓일 때 값;

 

📌 예제:

int a = 10, b = 5;
int max = (a > b) ? a : b;  // a가 b보다 크면 a, 아니면 b
printf("%d", max);  // 출력: 10

8. 형 변환 연산자 (Type Casting Operator)

데이터 타입을 변환하는 연산자입니다.

📌 예제:

int a = 5;
double b = (double)a / 2;  // 정수 5를 실수로 변환하여 2.5 반환
printf("%f", b);  // 출력: 2.500000

9. sizeof 연산자

변수 또는 자료형의 크기를 반환하는 연산자입니다.

📌 예제:

printf("%lu", sizeof(int));  // 보통 4 (바이트) 출력

10. 쉼표 연산자 (Comma Operator)

여러 개의 표현식을 한 줄에서 실행할 때 사용됩니다.

 

📌 예제:

int a, b;
a = (b = 3, b + 2);  
printf("%d", a);  // 출력: 5

11. 포인터 연산자 (&, *)

포인터와 관련된 연산자입니다.

연산자 의미

& 변수의 주소 반환
* 포인터가 가리키는 값

📌 예제:

int a = 10;
int *ptr = &a;  // a의 주소 저장
printf("%d", *ptr);  // 출력: 10

 

🏆 C 언어 연산자 우선순위 (Operator Precedence)

연산자는 **우선순위(Precedence)**에 따라 연산이 수행됩니다.
또한 **결합 방향(Associativity)**에 따라 동일한 우선순위를 가진 연산자가 평가되는 방향이 결정됩니다.


🔹 연산자 우선순위 표

우선순위 연산자 설명 결합 방향

1 (), [], ->, . 괄호, 배열, 구조체 멤버 접근 좌→우
2 ++, -- (후위) 후위 증가/감소 좌→우
3 ++, -- (전위), +, - (단항), !, ~, (type), * (포인터), & (주소), sizeof 단항 연산자, 형 변환, 주소 연산 우→좌
4 *, /, % 곱셈, 나눗셈, 나머지 좌→우
5 +, - 덧셈, 뺄셈 좌→우
6 <<, >> 비트 이동 (Shift) 좌→우
7 <, <=, >, >= 비교 연산 좌→우
8 ==, != 같음, 다름 비교 좌→우
9 & 비트 AND 좌→우
10 ^ 비트 XOR 좌→우
11 ` ` 비트 OR
12 && 논리 AND 좌→우
13 `   `
14 ?: 삼항 연산자 우→좌
15 =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, ` =` 대입 연산
16 , 쉼표 연산자 좌→우

🔹 우선순위 & 결합 방향 설명

  • 높은 우선순위를 가진 연산자가 먼저 실행됨
  • 결합 방향(Associativity):
    • 좌→우(Left to Right): 왼쪽에서 오른쪽 순으로 실행
    • 우→좌(Right to Left): 오른쪽에서 왼쪽 순으로 실행 (ex. 대입 연산 =)

🔹 우선순위 예제

📌 1. 산술 연산자 & 비교 연산자

#include <stdio.h>

int main() {
    int result = 10 + 2 * 5;  // 10 + (2 * 5) = 20
    printf("%d\n", result);  // 출력: 20
}

✔️ 곱셈(*)이 덧셈(+)보다 우선순위가 높아 먼저 실행됨


📌 2. 논리 연산자

#include <stdio.h>

int main() {
    int a = 3, b = 4, c = 5;
    int result = a < b && b < c;  // (3 < 4) && (4 < 5) -> 1 && 1 -> 1
    printf("%d\n", result);  // 출력: 1
}

✔️ 비교 연산(<)이 논리 AND(&&)보다 우선순위가 높음


📌 3. 삼항 연산자 & 대입 연산자

#include <stdio.h>

int main() {
    int a = 10, b = 20;
    int max = (a > b) ? a : b;
    printf("%d\n", max);  // 출력: 20
}

✔️ ? : 연산자는 = 대입 연산보다 우선순위가 높아 먼저 실행됨


📌 4. 대입 연산자의 결합 방향

#include <stdio.h>

int main() {
    int a, b, c;
    a = b = c = 5;  // (a = (b = (c = 5)))
    printf("%d %d %d\n", a, b, c);  // 출력: 5 5 5
}

✔️ 대입 연산(=)은 오른쪽에서 왼쪽(Right to Left)으로 실행됨


🚀 정리

  1. 산술(* / % + -) → 비교(> < ==) → 논리(&& ||) → 대입(=) 순으로 우선순위
  2. 대부분 연산자는 좌→우 결합, 대입 연산자는 우→좌 결합
  3. 괄호 ()를 사용하면 우선순위를 명확하게 지정 가능!

✅ 복잡한 식을 다룰 때는 괄호를 적극적으로 활용하면 실수를 줄일 수 있습니다! 🎯

'정보처리기사' 카테고리의 다른 글

C언어 - 함수  (0) 2025.03.27
C 언어 - 1차원 배열, 2차원 배열, 문자열 동시 사용  (0) 2025.03.26
C 언어 - 1차원 배열 & 2차원 배열  (0) 2025.03.26
C언어 - 반복문  (0) 2025.03.26
C언어 - 조건문  (0) 2025.03.26