C/C

[C언어] 연산자(operator)

Hya68 2024. 12. 26. 14:56

연산자(operator)란?

  • 자료에 대해 각종 연산을 수행하게 하는 기호
  • 종류
    산술 연산자 +, -, *, /, %, ++, --
    관계 연산자 >, <, >=, <=, ==, !=
    논리 연산자 &&, ||, !
    대입 연산자 +=, -=, *=, /=, %=, ≪=, ≫=, !=, &=
    조건 연산자 ? :
    비트 연산자 &, |, ^, ~, ≫, ≪
    기타 연산자 sizeof(), cats, &, *

 

산술 연산자

이항 연산자
(binary operator)
+, -, *, / 사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈) 16 + 5 (결과: 21)
% 나머지 연산자 16 % 5 (결과: 1)
단항 연산자
(unary operator)
- 부호의 반전 -5
++ 증감 연산자 5++(후위연산), ++5(전위연산)
-- 5-- (후위연산) , --5 (전위연산)
  • 후위연산 : 값을 먼저 사용 후 1 증감
  • 전위연산 : 1 증감 후 값을 사용
  • 예) a=5; i = a++;, j = ++a; (결과 : a는 7, i는 5, j는 7)

 

관계 연산자(relational operator)

== 왼쪽 피연산자와 오른쪽 피연산자가 같으면 1 반환 a == b
!= 왼쪽 피연산자와 오른쪽 피연산자 다르면 1 반환 a != b
>, >=, <=, < 왼쪽 피연산자와 오른쪽 피연산자의 대소 관계를 비교 a >= b
  • 피연산자에 대한 대소 관계 비교
  • 참이면 1, 거짓이면 0 반환

 

논리 연산자(logical operator)

&& 논리곱(AND) : 모두 참이면 1 반환 a && b
|| 논리합(OR) : 둘 중 하나라도 참이면 1 반환 a || b
! 논리부정(NOT) : 논리식 결과가 참이면 0, 거짓이면 1 반환 !a
  • 주어진 논리식을 판단
  • 진리표
    a b a && b a || b !a
    1 (true) 1 (true) 1 (true) 1 (true) 0 (false)
    1 (true) 0 (false) 0 (false) 1 (true) 0 (false)
    0 (false) 1 (true) 0 (false) 1 (true) 1 (true)
    0 (false) 0 (false) 0 (false) 0 (false) 1 (true)

 

비트 연산자(bitwise operator)

& 대응되는 비트가 모두 1이면 1을 반환 (비트 AND 연산) a & b
| 대응되는 비트 중에서 하나라도 1이면 1을 반환 (비트 OR 연산) a | b
^ 대응되는 비트가 서로 다르면 1을 반환 (비트 XOR 연산) a ^ b
~ 비트를 1이면 0으로, 0이면 1로 반전시킴 (비트 NOT 연산) ~a
<< 지정한 수만큼 비트들을 전부 왼쪽으로 이동 (left shift 연산) a << 2
>> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동 (right shift 연산) a >> 2
  • 수치를 2진수로 변환하여 bit 단위의 연산 수행
  • 비트 시프트(<<, >>) 연산 : 이동 후 빈 공간에는 0이 채워짐

 

대입 연산자(assignment operator)

= 왼쪽의 피연산자에 오른쪽의 피연산자를 대입 a = 5 (기본값)
+= 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입 a += 5 (결과 : a는 10)
-= 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입 a -= 5 (결과 : a는 0)
*= 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입 a *= 5 (결과 : a는 25)
/= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입 a /= 5 (결과 : a는 1)
%= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입 a %= 5 (결과 : a는 0)
&= 왼쪽의 피연산자와 오른쪽의 피연산자에 대해 bit 단위의 AND 연산을 한 후, 그 결괏값을  왼쪽의 피연산자에 대입 a &= 5 (결과 : a는 5)
|= 왼쪽의 피연산자 와 오른쪽의 피연산자에 대해 bit 단위의 OR 연산을 한 후, 그 결괏값을  왼쪽의 피연산자에 대입 a |= 5 (결과 : a는 5)
^= 왼쪽의 피연산자와 오른쪽의 피연산자에 대해 bit 단위의 XOR 연산을 한 후, 그 결괏값을 왼쪽의 피연산자에 대입 a ^ = 5 (결과 : a는 0)
<<= 왼쪽의 피연산자를 오른쪽의 피연산자만큼의 bit 왼쪽으로 이동 후, 그 결괏값을 왼쪽의 피연산자에 대입 a <<= 1 (결과 : a는 10)
>>= 왼쪽의 피연산자를 오른쪽의 피연산자 만큼의 bit 오른쪽으로 이동 후, 그 결괏값을 왼쪽의 피연산자에 대입 a >>= 1 (결과 : a는 2)
  • 연산자의 오른쪽을 왼쪽에 대입
  • 수식을 압축하여 기술 → 프로그램의 길이 축소 및 실행 속도 감소

 

조건 연산자(conditional operator)

  • 형식 : (조건) ? 수식 1 : 수식 2;
  • 조건이 참이면 수식 1 수행, 거짓이면 수식 2 수행
  • 삼항 연산자라고도 함
  • 예) int a = 10; a < 3 ? 1 : 0; (결과 : 0)

 

기타 연산자

sizeof() 지정한 자료형, 수식, 변수가 차지하는 기억공간의 크기(byte)를 구함 sizeof(int) (결과 : 4)
cast(형변환) 지정된 자요형을 다른 자료형으로 강제적으로 바꿈 (float)10/4 (결과 : 2.25)
& 주소 연산자, 피연산자의 주소를 나타냄 &a
* 참조 연산자, 피연산자의 내용을 나타냄 *a
  • 형변환
    1. 자동 형변환
      • 컴파일러에 의해 자동으로 발생하는 형변환
      • 예) int a = 3, b = 4; double c = a / b; (결과 : 0.00000)
      • 위의 예시에서 보면 우선 int형으로 a / b 계산 후의 결괏값을 double형으로 나타낸 것
    2. 강제 형변환
      • cast 연산자를 사용하여 형변환을 명시해서 강제로 변환이 일어나는 것
      • 예) int a = 3, b = 4; double c = (double)a / b; (결과 : 0.00000)
      • 위의 예시에서 보면 우선 a를  double형으로 형변환 한 후  a / b 계산 후의 결괏값을 나타낸 것, 이 때 b는 산술연산 형변환 규칙에 의해 자동으로 double형이 된다.

 

연산자 우선순위

  • 수학과 마찬가지로 C언어에서 제공되는 모든 연산자에는 연산자 우선순위가 정해져있음
  • 즉, 하나의 연산식에 여러 연산자가 사용될 경우 연산자 우선순위에 의해 실행됨
    괄호, 구조체, 공용체 연산자 (), [], ->, . 높음




















    낮음
    단항 연산자 !, ~, ++, --, &, *, sizeof(), cast
    이항연산자 *, /, %
    +, -
    <<, >>
    <<=, >>=
    ==, !=
    &
    ^
    \
    &&
    ||
    조건 연산자 ? :
    대입 연산자 =, +=, *=, ..., &=

참고자료

[도서]

- C 프로그래밍 (저자 김형근, 곽덕훈, 정재화 / 2020 발행)

 

[웹사이트]

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com