ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] 간단한 개념 정리 (Chapter 03)
    [C언어] 2023. 9. 27. 16:26

    연산자 : C언어를 이용해서 특정연산을 요구할 때 사용하는 약속된 기호를 가리켜 '연산자' 라고 한다.

    변수 : 값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체를 가리킴.

     

     

     

    변수를 이용한 데이터의 저장

     

    #include <stdio.h>

    int main(void) {
    int num; // num 이라는 변수 선언
    num = 20; // 변수 num 에 20 저장
    printf("%d", num); // 변수 num 의 값 참조

    return 0;
    }

    int : 정수의 저장이 가능한 메모리 공간을 할당.

    num : 그 메모리 공간의 이름을 num 이라 한다.

     

     

     

    변수의 다양한 선언 및 초기화 방법

     

    초기화 : 선언된 변수에 처음 저장하는 것을 가리켜 '초기화' 라고 한다.

     

    int num = 12;

    위와 같이 선언과 동시에 초기화가 가능함.

     

    int a, b;

    여러 개의 변수를 선언할 수 있다.

     

    int c = 30, d = 40;

    여러 개의 변수를 선언과 동시에 초기화도 할 수 있다.

     

     

    + 변수를 선언만 하고 초기화하지 않으면 쓰레기 값이 저장된다.

    여기서 쓰레기 값이란 '아무런 의미가 없는 값' 을 의미하며 가급적 이러한 쓰레기 값이 변수에 저장되지 않도록 하는 것이 좋다. 

    따라서 선언과 동시에 0으로 초기화한 다음, 이후에 의미 있는 값을 저장하는게 좋다.

     

     

     

    변수선언 시 주의할 사항

     

    1. 중괄호 내에 변수를 선언할 경우 , 변수의 선언문은 중괄호의 앞부분에 위치해야 한다.

    2. 변수의 이름은 알파벳, 숫자, 언더바 ( _ ) 로 구성한다.

    3. C언어는 대소문자를 구분하므로 변수 Num 과 변수 num은 서로 다른 변수이다.

    4. 변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름으로 사용할 수 없다.

    5. 이름 사이에 공백이 삽입될 수 없다.

     

    + 변수의 이름을 정할 때에는 변수의 역할에 어울리는, 의미 있는 이름을 지어야 한다. 

     

     

     

    변수의 자료형 (TYPE)

     

    정수형 변수 : 정수의 저장을 목적으로 선언된 변수

    실수형 변수 : 소수점 이하의 값을 지니는 실수의 저장을 목적으로 선언된 변수

     

    대입 연산자 ( = ) 와 산술 연산자 ( +, -, *, /, %

     

    이항 연산자 : 두 개의 피연산자를 요구하는 연산자를 가리켜 '이항 연산자' 라고 한다.

     

    연산자 연산자의 기능 결합방향
    = 연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입한다. <-
    + 두 피연산자의 값을 더한다. ->
    - 왼쪽의 피연산자 값에서 오른쪽의 피연산자 값을 뺀다. ->
    * 두 피연산자의 값을 곱한다. ->
    / 왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눈다. ->
    % 왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게 되는 나머지를 반환한다. ->

     

    + 함수 호출문의 인자 전달 위치에 연산식이 올 수 있다.

     

    복합 대입 연산자

     

    a = a + b a += b
    a = a - b a -= b
    a = a * b a *= b
    a = a / b a /= b
    a = a % b a %= b

     

    ex)

    #include <stdio.h>

    int main(void) {

    int num1 = 2, num2 = 4, num3 = 6;

    num1 += 3; // num1 = num1 + 3;
    num2 *= 4; // num2 = num2 * 4;
    num3 %= 5; // num3 = num3 % 5;

    printf("Result: %d, %d, %d \n ", num1, num2, num3);
     
    return 0;
    }
    Result: 5, 16, 1

     

    증가, 감소 연산자

     

     

    연산자 연산자의 기능 결합방향
    ++num 값을 1 증가 후, 속한 문장의 나머지를 진행 (선 증가, 후 연산) <-
    num++ 속한 문장을 먼저 진행한 후, 값을 1 증가 (선 연산, 후 증가) ->
    --num 값을 1 감소 후, 속한 문장의 나머지를 진행 (선 감소, 후 연산) <-
    num-- 속한 문장을 먼저 진행한 후, 값을 1 감소 (선 연산, 후 감소) ->

     

    관계 연산자 ( <, >, ==, !=, <=, >= ) - " 조건을 만족하면 1, 만족하지 않으면 0을 반환. "

    연산자 연산자의 기능 (n1, n2) 결합방향
    < n1 이 n2 보다 작은가? ->
    > n1 이 n2 보다 큰가? ->
    == n1 과 n2 가 같은가? ->
    != n1 과 n2 가 다른가? ->
    <= n1 이 n2 보다 같거나 작은가? ->
    >= n1 이 n2 보다 같거나 큰가? ->

    논리 연산자 ( &&, ||, ! )

     

    연산자 연산자의 기능 ( A, B) 결합방향
    && A 와 B 모두 '참'이면 연산결과로 '참'을 반환
    (AND)
    ->
    || A 와 B 둘 중 하나라도 '참'이면 연산결과로 '참'을 반환 (OR) ->
    ! A 가 '참'이면 '거짓', A 가 '거짓'이면 '참'을 반환
    (NOT)
    <-

     

    ex) 

     

    #include <stdio.h>

    int main(void) {
    int num1 = 10;
    int num2 = 12;
    int result1, result2, result3;

    result1 = (num1 == 10 && num2 == 12);
    result2 = (num1 < 12 || num2 > 12);
    result3 = (!num1);

    printf("result1: %d \n", result1);
    printf("result2: %d \n", result2);
    printf("result3: %d \n", result3);

    return 0;
    }
    result1: 1 
    result2: 1 
    result3: 0

     

    + 논리 연산자보다 관계 연산자가 먼저 진행이 됨

    + C언어는 0이 아닌 모든 값을 '참(true)' 으로 간주한다.

     

    콤마 연산자 ( , )

     

    ex)

     

    #include <stdio.h>

    int main(void) {

    int num1 = 1, num2 = 2;
    printf("Hello "), printf("world! \n");
     
    num1++, num2++;
    printf("%d ", num1), printf("%d ", num2), printf("\n");

    return 0;
    }
    Hello world! 
    2 3

     

    연산자의 우선순위와 결합방향

     

    결합방향 : 우선순위가 동일한 두 연산자가 하나의 수식에 존재하는 경우, 어떠한 순서대로 연산하느냐를 결정해 놓은 것

     

    순위 연산기호 연산자 결합방향
    1위 () 함수호출 ->
      [] 인덱스 ->
      -> 간접지정 ->
      . 직접지정 ->
      ++ (postfix)
    -- (postfix)
    후위증가 및 감소 ->
    2위 ++ (prefix)
    -- (prefix)
    전위증가 및 감소 <-
      sizeof 바이트 단위 크기 계산 <-
      ~ 비트 단위 NOT <-
      ! 논리 NOT <-
      -, + 부호 연산 (음수와 양수의 표현) <-
      & 주소 연산 <-
      * 간접지정 연산 <-
    3위 (casting) 자료형 변환 <-
    4위 *, /, % 곱셈, 나눗셈 관련 연산 ->
    5위 +, - 덧셈, 뺄셈 ->
    6위 <<, >> 비트이동 ->
    7위 <, >, <=, >= 대소비교 ->
    8위 ==, != 동등비교 ->
    9위 & 비트 AND ->
    10위 ^ 비트 XOR ->
    11위 | 비느 OR ->
    12위 && 논리 AND ->
    13위 || 논리 OR ->
    14위 ? : 조건연산 <-
    15위 =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= 대입연산 <-
    16위 , 콤마연산 ->

     

     

     

    키보드로부터의 정수입력을 위한 scanf 함수의 호출

     

    int main(void) {
    int num;
    scanf("%d", &num); // 키보드로 입력된 정수를 변수 num에 저장하라.
    }

    "%d" : 10진수 정수형태로 입력 받는다.

    "&num" : 변수 num 에 저장하라.

     

    & => 일단 " 입력된 데이터를 저장할 변수의 이름 앞에 & 연산자를 붙여야 한다. " 라고만 기억하고 있을 것.

     

     

     

     

Designed by Tistory.