C프로그래밍 4장

이은주·2022년 9월 19일
0

C프로그래밍

목록 보기
4/6

1. 수식과 연산자 개요

1-1. 연산자

  • 데이터를 가공하고 처리하기 위한 가장 기본 도구
  • 연산 종류에 따른 분류 : 산술 연산자, 관계 연산자, 논리 연산자, 증감 연산자, 비트 연산자, 대입 연산자, 조건 연산자 등
  • 피연산자 개수에 따른 분류 : 단항 연산자, 이항 연산자, 삼항 연산자

1-2. 수식

  • 피연산자들과 연산자의 조합으로 어떠한 값을 갖는 요소
num = 10;			// 상수인 10이 수식
num1 = num;			// 변수인 num이 수식
num2 = num + 1;		// 연산식인 num + 1이 수식

2. 산술 연산자

2-1. 산술 연산자 종류

연산자정수 연산부동소수 연산
+더하기더하기
-빼기빼기
*곱하기곱하기
/실수 나눗셈
%나머지(정의 되지 않음)

2-2. 연산 순서

  • 연산자 우선순위 : *, /, % > +, -
  • 결합 수칙 : 왼쪽에서 오른쪽 방향으로 적용

2-3. 산술 연산과 자료형

  • 연산 결과도 자료형이 정해져 있어야 함
  • 산술 연산의 경우 피연산자의 자료형에 따라 연산 결과값의 자료형이 결정됨
    • 정수형과 정수형 → 정수형
    • 부동소수형과 부동소수형 → 부동소수형
    • 정수형과 부동소수형 → 부동소수형
  • 앞의 규칙은 연산자 별로 적용
  • 앞의 규칙은 변수에도 동일하게 적용

2-4. 피연산자가 모두 정수형인데, 부동소수 연산을 하고 싶으면?

  • 명시적 형변환 이용
    • 형 변환이 적용되는 범위에 주의
    int a = 5, b = 2;
    double x;
    x = (double) a / b;
    x = (double) (a / b);

3. 대입 연산자

3-1. 대입 연산자 =

  • 연산자 오른쪽 수식의 값을 왼쪽 변수에 대입(수학의 등호와 완전히 다른 의미)

    변수 = 수식

3-2. 연속 대입

  • 대입 연산의 결과는 왼쪽 변수에 저장되는 값
  • 이를 이용하면 대입을 연속적으로 수행할 수 있음
    a = b = c = 2; 이 문장의 의미는
    c = 2;
    b = c;
    a = b;

3-3. 복합 대입 연산자

: 대입 연산자와 산술 연산자의 결합

복합 대입 연산동일 대입문
a += xa = a + (x)
a -= xa = a - (x)
a *= xa = a * (x)
a /= xa = a / (x)
a %= xa = a % (x)

3-4. 증감 연산자

  • 변수의 값을 1씩 증가(++) 혹은 감소(--) 시키는 단항 연산자
증감 연산의미
++aa의 값 1 증가 -> a의 값 사용
--aa의 값 1 감소 -> a의 값 사용
a++a의 값 사용 -> a의 값 1 증가
a--a의 값 사용 -> a의 값 1 감소

4. 관계 연산자

4-1. 관계 연산자

  • 왼쪽과 오른쪽의 대소 관계를 비교하는 연산자
  • 연산의 결과가 참이면 1이고 거짓이면 0
    • C언어에서는 0이 아닌 값은 모두 참으로 간주
관계 연산의미
x == yx의 값과 y의 값이 같다
x != yx와 y가 같지 않다
x < yx가 y 보다 작다
x <= yx가 y 보다 작거나 같다
x > yx가 y 보다 크다
x >= yx가 y 보다 크거나 같다

4-2. 관계 연산자와 산술 연산자의 우선순위

  • 관계 연산자 < 산술 연산자

4-3. 주의) 수식 4 < 5 < 2 의 결과는?

  • 수학적 의미
    : 5는 4보다 크고 2보다 작다 (거짓)
  • C언어에서의 의미
    : 4 < 5 < 2 → (4 < 5) < 2 → 1 < 2 → 수식 결과 : 참(1)

5. 논리 연산자

5-1. 논리 연산자

  • 논리 연산 값으로 참이면 1, 거짓이면 0
논리 연산의미연산 결과
!x논리부정(NOT)x가 참이면 거짓, 거짓이면 참
x && y논리곱(AND)x, y가 둘 다 참이면 참, 그렇지 않으면 거짓
x ││ y논리합(OR)x, y 중 하나라도 참이면 참, 그렇지 않으면 거짓

5-2. 논리 연산자의 연산 순서

  • 우선순위 : ! > && > ||
  • 우선순위가 같은 경우 왼쪽부터 계산
  • 우선순위를 무시하려면 괄호 사용

5-3. 논리 연산자와 관계/산술 연산자의 우선순위

  • ! > 관계/산술 연산자 > && < ||

6. 그 외 연산자

6-1. 조건 연산자

  • if ~ else 문을 대신하여 사용할 수 있는 연산자
  • 피연산자 수가 3개인 삼항 연산자

    조건 ? A : B

    • 조건이 true인 경우, 결과 값은 A
    • 조건이 false인 경우, 결과 값은 B

6-2. 콤마 연산자

  • 여러 수식을 하나의 문장으로 표현할 때 사용
a = b + 3, b = 2, b += a;

6-3. sizeof 연산자

  • 저장 공간의 크기를 바이트 단위로 계산
    sizeof(char)의 결과 값 1 (괄호 필수)
    sizeof(3.14) 또는 sizeof 3.14의 결과 값 8
    sizeof(num) 또는 sizeof num의 결과 값 4 (num이 int 형 변수일 때)
  • 시스템에 따라 결과 값은 다를 수 있음

6-4. 형변환 연산자 : 명시적 형변환을 위해 사용

  • x = (double) a/b; → a의 자료형을 부동 소수로 변환
  • x = (double) (a/b); → a/b의 결과 값을 부동 소수로 변환

7. 연산자 우선순위와 결합수칙

7-1. 연산자 우선순위

  • 여러 연산자가 함께 사용된 경우 우선순위에 의존
  • 다른 순서로 연산을 하고 싶은 경우 괄호를 이용

7-2. 결합수칙

  • 연산의 순서를 나타냄
  • 연산자 우선순위가 같은 경우 결합수칙에 의존
순위연산자종류결합수칙
1() [] . ->멤버왼쪽 우선
2+ - ++ -- ! ~ * & sizeof (자료형)단항오른쪽 우선
3* % /산술왼쪽 우선
4+ -산술왼쪽 우선
5<< >>비트(이동)왼쪽 우선
6< > <= >=관계왼쪽 우선
7== !=관계왼쪽 우선
8&비트(논리)왼쪽 우선
9^비트(논리)왼쪽 우선
10비트(논리)왼쪽 우선
11&&논리왼쪽 우선
12||논리왼쪽 우선
13?:조건오른쪽 우선
14= += -= *= %= /= ^= <<= >>=대입오른쪽 우선
15,콤마왼쪽 우선

0개의 댓글