입출력 함수와 연산자 - 2

연산자의 기능과 사용방법, 우선순위.

  • 학습 목표

    1. 연산자.
    2. 연산자의 우선순위 이해.
  • 주요 용어

    • 연산자 (operator) : 임의의 자료에 대해 각종 연산을 수행하도록 하는 기호.
    • 이항 연산자 : 2개의 자료를 재상으로 산술적인 처리를 수행하는 연산자.
    • 단항 연산자 : 1개의 자료만을 대상으로 산술적인 처리를 수행하는 연산자.
    • 관계 연산자 : 피 연산자에 대한 대.소 관계를 비교하는 연산자.
    • 논리 연산자 : 피 연산자에 대한 논리연산(AND, OR, NOT)을 수행하는 연산자.
    • 대입 연산자 : '='를 사용하여, 연산자의 오른쪽을 왼쪽에 대입하는 데 사용.
    • 조건 연산자 : 주어진 조건의 만족여부에 따라 지정된 수식을 수행하는 연산자.
    • 비트 연산자 : 수치를 2진수로 변환하여 bit 단위의 연산을 수행하는 연산자.
    • 기타 연산자 : sizeof(), cast(형변환), &(주소 연산자), *(내용 연산자) 등.
    • 연산자 우선순위 : 모든 연산자에는 연산자 우선순위가 정해져 있음.

연산자

임의의 자료에 대해 각종 연산을 수행하도록 하는 기호.

  • 연산자의 종류
구분 연산자
산술 연산자 + - * / % ++ --
관계 연산자 > < >= <= == !=
논리 연산자 & || !
대입 연산자 += -= *= /= %= <<= >>= !=
조건 연산자 ?:
비트 연산자 & | ^ ~ << >>
기타 연산자 sizeof() cast & .
  #include <stdio.h>

  int main()
  {
    int x, y;
    x = 10, y = 3;

    printf("x + y = %d\n", x + y);
    printf("x / y = %d\n", x / y);
    printf("x %% y = %d\n", x % y);
    printf("y %% x = %d\n", y % x);
    return 0;
  }

산술 연산자

피 연산자에 대해 사칙연산을 포함한 각종 산술연산을 수행하는 연산자.

구분 연산자 기능
이항 연산자 + - * / 가 감 승 제를 계산 i + 5
이항 연산자 % 나눗셈의 나머지 계산 i % 5
단항 연산자 - 부호의 반전 -5
단항 연산자 ++ 1 증가 i++, ++i
단항 연산자 -- 1 감소 i--, --i
  #include <stdio.h>

  int main()
  {
    int x = 5, a, b;
    a = ++x * x--;
    b = x * 10;

    printf("a = %d b = %d x = %d\n", a, b, x);
    return 0;
  }

관계 연산자

피 연산자에 대한 대,소 관계를 비교하는 연산자.

연산자 기능
== 같은가의 여부 비교 a == b : a와 b는 같다.
!= 다른가의 여부 비교 a != b : a와 b는 같지 않다.
> >= < <= 대,소 관계 비교 a >= b : a는 b보다 크거나 같다.
#include <stdio.h>

int main()
{

  int a = 4, b, c, d;

  b = a > 2;
  printf("b = %d\n", b);

  c = a < 2;
  printf("c = %d\n", c);

  d = a == 4;
  printf("d = %d\n", d);
  return 0;
}

논리 연산자

피 연산자에 대해 논리 연산을 수행하는 연산자.

연산자 기능
&& 논리곱(AND) : 양쪽 모두 참일 때만 참 a && b
|| 논리합(OR) : 양쪽 중 하나라도 참이면 참 a || b
! 논리 부정(NOT) : 오른쪽이 참이면 거짓, 거짓이면 참 !a
#include <stdio.h>

int main()
{

  int a = 4, b = 7, c, d, e;

  c = a > 2 & b <= 7;
  printf("c = %d\n", c);

  d = a < 2 || b <= 7;
  printf("d = %d\n", d);

  e = !a;
  printf("e = %d\n", e);

  return 0;
}

대입 연산자

연산자의 오른쪽을 왼쪽에 대입하는 연산자.

연산자 기능
= a = 5 a에 5를 대입
+= a += 5 a += 5 더한 후 결과를 대입
-= a -= 5 a -= 5 뺀 후 결과를 대입
*= a *= 5 a *= 5 곱한 후 결과를 대입
/= a /= 5 a /= 5 나눈 후 결과를 대입
%= a %=5 a %=5 나눈 후 그 나머지를 대입
&= a &= 5 a &= 5 bit 단위 AND 연산을 한 후 결과를 대입
|= a |= 5 a |= 5 bit 단위 OR 연산을 한 후 결과를 대입
^= a ^= 5 a ^= 5 bit단위 XOR 연산을 한 후 결과를 대입
<<= a <<= 5 a <<= 5 a의 값을 5 bit 좌로 이동 후 결과를 대입
>>= a >>= 5 a >>= 5 a의 값을 5비트 우로 이동 후 결과를 대입
#include <stdio.h>

int main()
{
  int a = 10, b = 3, c = 1;

  a *= (b - 1);
  b /= 2 + 3;
  c += 2;

  printf("a = %d, b = %d, c = %d\n", a, b, c);
  return 0;
}

조건 연산자

주어진 조건의 만족 여부에 따라 지정된 수식을 수행하는 연산자.

  • 형식 : (조건) ? 수식1 : 수식2;
  • 기능 : 조건이 성립하면 수식1, 성립하지 않으면 수식2를 실행
  • 사용 예 : x = (5 > 2) ? 1 : 0;
#include <stdio.h>

int main()
{
  int a = 10, b;

  b = (a > 15) ? (a + 1) : (a - 1);

  printf("b = %d\n", b);
  return 0;
}

비트 연산자

수치에 대해 bit 단위의 연산을 수행하는 연산자.

연산자 기능
& (bit AND) a & b 두 bit가 모두 1일 때만 1
| (bit OR) a | b 두 bit중 하나라도 1이면 1
^ (bit XOR) a ^ b 두 bit가 서로 다를 때만 1
~ (bit NOT) ~a 1은 0, 0은 1로 치환
<< (bit 좌로 이동) a << 2 2 bit 왼쪽으로 이동
>> (bit 우로 이동) a >> 2 2 bit 오른쪽으로 이동

비트 연산의 예

x -> 1 0 1 1 0 0 1 1
y -> 0 1 0 0 1 0 0 1
x & y -> 0 0 0 0 0 0 0 1
x | y -> 1 1 1 1 0 0 1 1
x ^ y -> 1 1 1 1 1 0 1 0
~x -> 0 1 0 0 1 1 0 0
x << 2 -> 1 1 0 0 1 1 0 0
x >> 2 -> 0 0 1 0 1 1 0 0

기타 연산자

연산자 기능
sizeof() 지정한 자료형, 수식, 변수가 차지하는 기억공간의 크기(byte)를 구함
cast(형변환) 지정한 자료형을 다른 자료형으로 강제정으로 바꿈
& 주소 연산자로 피 연산자의 주소를 나타냄
* 내용 연산자로 피 연산자의 내용을 가져옴

sizeof()

  • 형식 : sizeof(자료)
  • 기능 : 지정한 자료(자료형, 상수, 변수, 수식)에 대한 기억 장소의 크기를 구함
  • 사용 예 : sizeof(int)
#include <stdio.h>

int main()
{
  float a = 3.14;

  printf("sizeof data type int : %d byte\n", sizeof(int));
  printf("sizeof a, type of float  : %d byte\n", sizeof(a));
  // printf("b = %d", b);

  return 0;
}

cast()

  • 형식 : (형명칭) 자료;
  • 기능 : 이미 지정된 자료의 자료형을 강제적으로 다른 자료형으로 변환한다.
  • 사용 예 : (float) i / j
#include <stdio.h>

int main()
{
  int a = 3, b = 4;

  double c;

  c = (double)a / b;

  printf("result : %f\n", c);
  return 0;
}

연산자 우선 순위

연산자 명 연산자 결합방향 우선순위
괄호, 구조체, 공용체 연산자 () [] -> 좌 -> 우 높음
단항 연산자 ! ~ ++ -- & * sizeof() cast 우 -> 좌
승, 제 (이항 연산자) * / % 좌 -> 우
가, 감 (이항 연산자) + - 좌 -> 우
비트 이동 (이항 연산자) << >> 좌 -> 우
대 소 비교 (이항 연산자) < <= > >= 좌 -> 우
등가 판정 (이항 연산자) == != 좌 -> 우
bit AND (이항 연산자) & 좌 -> 우
bit XOR(이항 연산자) ^ 좌 -> 우
bit OR(이항 연산자) | 좌 -> 우
논리 AND (이항 연산자) && 좌 -> 우
논리 OR(이항 연산자) || 좌 -> 우
조건 연산자 ?: 우 -> 좌
대입 연산자 = += *= ... &= 우 -> 좌
#include <stdio.h>

int main()
{

  int a, b, c;

  a = 10;
  b = 20;
  c = 30;

  printf("a + b * c = %d\n", a + b * c);
  printf("a = b += 2 * c => a = %d\n", a = b += 2 * c);
  printf("a = ( b > c ) ? b : c => a = %d\n", a = (b > c) ? b : c);
  printf("a / b * c = %d\n", a / b * c);
  printf("a *= b = c + 5 => a = %d\n", a *= b = c + 5);

  return 0;
}
728x90
반응형

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

[C] 함수와 기억 클래스 - 1  (0) 2020.12.20
[C] 선택 제어문과 반복 제어문  (0) 2020.12.20
[C] 입출력 함수와 연산자 - 1  (0) 2020.12.15
[C] 자료형과 선행 처리기  (0) 2020.12.14
[C] C 언어의 개요  (0) 2020.12.13

+ Recent posts