ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C programming 기초 2강
    과외 수업 자료/C 2022. 10. 11. 14:54

     

    앞선 강의에서 c programming의 구성과 printf, scanf에 대해서 학습을 진행했다.

    이번 강의에서는 연산자와 자료형에 대해서 알아볼 것이다.


    1. 연산자

    연산자란 연산을 수행하는 기호를 의미한다.

    연산자 용어 정리

    C언어의 연산자란 논리식이나 산술식을 표현하고 처리하기 위해서 제공되는 다양한 기호들을 의미한다.

    대입, 산술, 복합 대입, 증감, 관계, 논리, 조건, 비트 논리와 비트 이동 연산자가 있다.

     

    이 중 본 글에서는 대입, 산술, 복합 대입, 증감, 관계, 논리, 조건 연산자에 대해서 알아볼 것이다.

    분류 연산자
    대입 연산자 =
    산술 연산자 +, -, *,  /, %
    복합 대입 연산자 +=, -=, *=, /=, %=
    증감 연산자 ++, --
    관계 연산자 >, <, ==, !=, >=, <=
    논리 연산자 &&, ||, !
    조건 연산자 ?:
    비트 논리 연산자 &, |, ^, ~
    비트 이동 연산자 >>, <<

    위의 표는 연산자의 종류를 정리한 것이다.


    1.1 대입 연산자

    연산자 = 은 대입 연산자이다.

    이전 변수 부분에서 이미 사용한 연산자이다.

    예를 들어, int i = 3은 변수 i에 3을 대입하는 것을 의미한다.

    이를 i는 3과 같다고 혼동해서는 안된다.


    1.2 산술 연산자

    C언어에는 덧셈(+), 뺄셈(-), 곱셈(*) , 나눗셈(/), 나머지(%) 연산과 같은 산술 연산자를 제공한다.

    산술 연산자 설명
    + a = 6+2 피연산자 6과 피연산자 2의 덧셈 연산
    - a = 6-2 피연산자 6과 피연산자 2의 뺄셈 연산
    * a = 6*2 피연산자 6과 피연산자 2의 곱셈 연산
    / a = 6/2 피연산자 6과 피연산자 2의 나눗셈 연산
    % a = 6%2 피연산자 6과 피연산자 2를 나눈 나머지 연산

    이를 샘플 코드를 통해 구현해보면,

    산술 연산자 샘플 코드 및 실행 결과

    다음과 같은 결과를 얻을 수 있다.


    1.3 복합 대입 연산자

    산술 연산자와 대입 연산자를 하나로 나타내는 기호를 의미한다.

    복합 대입 연산자 같은 표현 설명
    a = a + b a += b a + b를 먼저 수행한 후에 a에 값을 저장
    a = a – b a -= b a - b를 먼저 수행한 후에 a에 값을 저장
    a = a * b a *= b a * b를 먼저 수행한 후에 a에 값을 저장
    a = a / b a /= b a / b를 먼저 수행한 후에 a에 값을 저장
    a = a % b a %= b a % b를 먼저 수행한 후에 a에 값을 저장

    위는 복합 대입 연산자의 종류와 의미를 정리한 표이다.

    복합 대입 연산자 샘플 코드 및 실행 결과


    1.4 증감 연산자

    연사자로 피연산자의 값을 1 증가 또는 1 감소시켜 준다.

    증감 연산자의 위치에 따라 연산 순서가 달라짐을 인지하고 잘 사용해야 한다.

    증감 대입 연산자 설명
    ++a 선 증가, 후 연산 (먼저 증가시키고 그 다음 연산)
    a++ 선 연산, 후 증감 (먼저 연산하고 그 다음 증가)
    --a 선 감소, 후 연산 (먼저 감소시키고 그 다음 연산)
    a-- 선 연산, 후 감소 (먼저 연산하고 그 다음 감소)

    위 표는 증감 연산자의 종류와 설명을 정리한 표이다.

    증감 연산자의 샘플코드와 실행 결과

    위 실행결과와 같이 증감 연산자는 위치에 따라 변수에 대입되는 수가 다름을 확일할 수 있다.


    1.5 관계 연산자

    관계를 비교하여 참(True)과 거짓(False)으로 결론짓는 연산자를 관계 연산자라고 한다.

    True와 False를 정수로 표현하면 각각 1과 0이다.

    관계 연산자 설명 결과
    > a > b ab보다 클지를 비교 1(), 0(거짓)
    < a < b ab보다 작을지를 비교 1(), 0(거짓)
    >= a >= b ab보다 크거나 같을지를 비교 1(), 0(거짓)
    <= a <= b a가 b보다 작거나 같을지를 비교 1(), 0(거짓)
    == a == b a가 b와 같을지를 비교 1(), 0(거짓)
    != a != b a가 b와 같지 않을지를 비교 1(), 0(거짓)

    관계 연산자의 종류와 설명을 정리한 표이다.

    관계 연산자의 샘플 코드 및 결과


    1.6 논리 연산자

    논리 연산자에는 &&, ||, ! 세 가지 연산자가 있다.

    - &&

    AND 연산자이며, 논리곱을 의미한다.

    a && b 일 경우 a와 b가 모두 참일 경우에만 참이다.

    a 연산자 b 결과
    1 && 1 1
    1 && 0 0
    0 && 1 0
    0 && 0 0

     

    - ||

    OR 연산자이며, 논리합을 의미한다.

    a || b 일 경우 a와 b가 둘 중 하나만 참이면 참이다.

    a 연산자 b 결과
    1 || 1 1
    1 || 0 1
    0 || 1 1
    0 || 0 0

     

    - !

    NOT 연산자이며, 논리 부정을 의미한다.

    ! 는 참이면 거짓, 거짓이면 참이다.

    a 연산자 결과
    1 ! 0
    0 ! 1

    1.7 조건 연산자

    조건문과 같은 역할을 하는 연산자이다.

    조건 연산자의 연산 순서를 flowchar로 표현하면,

    조건 연산자의 flowchart

    이 처럼 조건식이 참일 경우 식1을 거짓일 경우 식2를 선택한다.

    조건 연산자의 샘플 코드와 실행 결과


    2. 자료형

    변수에 저장되는 데이터들은 정수형, 실수형, 문자형과 같이 다양한 형식(Type)을 가진다.

    이 처럼 데이터를 여러 형식으로 나누는 근거는 변수 앞에 붙여진 키워드를 보고 판단한다.

    이 키워드는 변수가 저장하는 데이터 형식을 나타내며 이것을 자료형(Data Type)이라고 한다.

    변수가 선언될 때 자료형에 해당하는 크기의 메모리가 만들어진다.

    자료형 정리

    자료형은 크게 정수형과 실수형으로 나눌 수 있다.

     

    - 정수형 : 정수를 표현하는 데이터 타입

    정수형
    char short int long

    - 실수형 : 소수점이 포함된 값을 표현하는 데이터 타입

    실수형
    float double long double

    2.1 정수형

    정수형은 signed와 unsigned로 나누어진다.

     

    - signed : 양수, 0, 음수를 모두 표현

    - unsigned : 0과 양수만 표현

     

    정수형 중에서 빠른 연산속도 때문에 int형을 선호한다.

    정수형 메모리 크기 데이터 표현 범위
    char (signed char)
    unsigned char
    1바이트 (8비트)
    1바이트 (8비트)
    -128 ~ +127
    0 ~ (127 + 128)
    short (signed short)
    unsigned short
    2바이트 (16비트)
    2바이트 (16비트)
    -32768 ~ +32767
    0 ~ (32767 + 32768)
    int (signed int)
    unsigned int
    4바이트 (32비트)
    4바이트 (32비트)
    -2147483648 ~ +2147483647
    0 ~ (2147483647 + 2147483648)
    long (signed long)
    unsigned long
    4바이트 (32비트)
    4바이트 (32비트)
    -2147483648 ~ +2147483647
    0 ~ (2147483647 + 2147483648)

    정수형 샘플 코드 및 결과

    위 샘플 코드를 통해 signed char의 경우 표현 가능한 수의 범위가 넘어 다른 수가 출력됨을 확인할 수가 있다.


    2.2 실수형

    정수형이 아닌 실수형 데이터를 저장하는 병수의 자료형을 실수형이라고 한다.

    즉, 소수점을 가진 실수의 값을 표현할 수 있는 자료형이다.

    실수형은 float, dobule, long double 세 가지 자료형을 가진다.

    정수형 메모리 크기 데이터 표현 범위
    float 4바이트(32비트) 1.17×10^(-38) ~ 3.40×10^38
    double 8바이트(64비트) 2.22×10^(-308) ~ 1.79×10^308
    long double 8바이트(64비트) 2.22×10^(-308) ~ 1.79×10^308

    실수형은 데이터의 정밀도를 높이기 위한 목적으로 사용된다.

    직관적으로 99보다 99.9가 더 정밀도가 높은 수임을 우리는 알고 있다. 즉, 정밀도는 소수점 이하 자릿수로 표현이 된다.

     

    아래 표와 같이 double은 더 많은 소수점 이하 자리를 표현할 수 있다.

    그러므로, 정밀도 측면에서 더 좋은 효과를 가져올 수 있는 double을 실수형에서는 사용하기를 선호한다.

    정수형 표현 가능한 소수점 이하 자리 수
    float 소수점 이하 6자리
    double 소수점 이하 15자리
    long double 소수점 이하 15자리 또는 그 이상

    실수형 샘플 코드 및 결과

    위 샘플 코드를 통해 실수형은 default로 6자리를 지원하고 뒤에 소수점 자리가 더 있을 경우 반올림되어 출력이 됨을 확일할 수 있다. 또한 double은 16자리까지 전부 지원이 되지만 float의 경우 그렇지 않음을 확인할 수 있다.

     

    2.3 형변환

    기존에 있던 자료형에서 다른 자료형으로 형변환이 가능하다.

    형변환은 자동 형변환과 강제 형변환 두 가지 방식이 존재한다.

     

    - 자동 형변환 : 컴파일러가 자동으로 형변환을 하는 방식

    - 강제 형변환 : 프로그래머가 강제로 형변환을 하는 방식

     

    자동 형변환의 경우 char -> int -> long -> float -> double -> long double 의 자료형 우선순위를 가지고 있으며 산술 연산을 하는 경우 우선순위에 따라 좁은 데이터 타입에서 넓은 데이터 타입으로 자동형 변환이 일어난다.

    자동 형변환 샘플 코드 및 결과

    강제 형변환의 경우는 위에서 언급하였듯 자동으로 자료형이 변환되는 것이 아닌 프로그래머가 강제적으로 바꾸어 주는 것이다.

    강제 형변환을 넓은 데이터 타입에서 좁은 데이터 타입으로 (ex. double에서 int로) 하게 되면 데이터에 손실이 일어날 수 있음을 인지하고 유의해야 한다.

    강제 형변환 샘플 코드 및 결과


    마치며..

    연산자와 데이터 타입 그리고 형변환에 대해서 알아보았다.

    C언어를 사용하며 기본이 되는 내용이니 외우고 있는 것이 좋다.

    다음에는 본격적으로 조건문과 반복문에 대해서 알아볼 것이다.


    < 참고 자료 >

    책 : 열혈강의 C언어본색 / 박정민

    '과외 수업 자료 > C' 카테고리의 다른 글

    C programming 기초 6강  (0) 2022.11.17
    C programming 기초 5강  (0) 2022.11.07
    C programming 기초 4강  (0) 2022.11.03
    C programming 기초 3강  (0) 2022.10.20
    C programming 기초 1강  (1) 2022.10.11
Designed by Tistory.