ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] 연산자 (Operator)
    C 2021. 12. 8. 04:19

     

    해당 글은 "열혈 C 프로그래밍" 책을 바탕으로 작성되었습니다.
    💡 특정 연산을 요구할 때 사용하는 약속된 기호

     

    연산자 우선순위

    • 하나의 문장 안에 둘 이상의 연산자가 존재할 때의 혼란을 줄이기 위해 정의함.
    • 증가/감소 연산자 → 부호 연산자 → 산술 연산자 → 관계 연산자 → 논리 연산자 → 삼항 연산자 → 할당 → 콤마 연산자 순

     

    연산자의 종류

    대입 연산자 [ = ]

    • 오른편에 오는 값을 왼편에 오는 변수에 값을 저장하는 형태

    산술 연산자 [ +, -, *, /, % ]

    복합 대입 연산자 [ +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= ]

    • 다른 연산자와 합쳐진 형태의 대입 연산자 ( 'a = a + b' 와 'a += b' 는 동일 연산)

    이항 연산자

    • 두 개의 피연산자를 요구하는 연산자

    부호 연산의 의미를 갖는 + 연산자와 - 연산자

    • 이항 연산자로서는 덧셈과 뺄셈을 의미하지만, 피연산자가 하나인 단항 연산자로서는 부호를 뜻하기도 함. (+3, +7, -num 과 같이 숫자 앞에 붙는 부호를 뜻하는 것)

    증가, 감소 연산자

    • ++num : 값 1 증가 후, 속한 문장의 나머지를 진행
    • num++ : 문장 먼저 진행 후, 값 1 증가
    • —num : 선 감소, 후 연산
    • num— : 선 연산, 후 감소
    int num2 = (num1--) + 2;
    /*
    1. num1의 선 연산, 후 감소
    2. 정수 2를 더해서 얻은 결과를 num2에 대입
    출력 결과 : 소괄호로 묶어졌지만 결과는 11이 아닌 12! (num1 이 10이라고 가정했을 때)
    => 해당 연산시에는 소괄효의 영향을 받지 않고, 다음 문장으로 넘어가야만 값의 증가/감소가 이루어진다는 사실
    */

    관계 연산자 [ <, >, ==, !=, <=, >= ]

    • 대소와 동등의 관계를 따지는 연산자로, 두 개의 값을 비교하기 때문에 '비교 연산자'라고도 함.
    • 해당 연산자는 조건을 만족하면 '참(true/1)'을 만족하지 않으면 '거짓(false/0)'을 반환함.

    논리 연산자 [ &&, ||, ! ]

    • AND (논리곱) [ && ] : A와 B 모두 '참'이면 연산결과로 '참'을 반환
    • OR (논리합) [ || ] : A와 B 둘 중 하나라도 '참'이면 '참'을 반환
    • NOT (논리부정) [ ! ] : A가 '참'이면 '거짓', A가 '거짓'이면 '참'을 반환

    콤마 연산자 [ , ]

    • 둘 이상의 변수를 동시에 선언하거나, 둘 이상의 문장을 한 행(line)에 삽입하는 경우 사용
    • 둘 이상의 인자를 함수로 전달할 때도 인자의 구분을 목적으로 사용
    • 연산의 결과가 아닌 '구분'을 목적으로 주로 사용

    조건 연산자 : 피연산자가 3개인 "삼항연산자"

    • 조건 연산자는 기호 ? 와 기호 : 로 이루어짐.
    • 조건이 '참'이면 연산 결과로 data1이 반환되고, 조건이 '거짓'이면 연산 결과로 data2가 반환됨.
      (조건) ? data1 : data2;​
    • 이는 간단한 if~else 문을 대신할 수 있는 연산자로, 프로그래머들이 선호하는 연산자임.

    소괄호 연산자

    : 먼저 연산하라는 의미

    비트 연산자

    • 비트 단위로 연산을 진행
    • & 연산자 (비트 단위 AND) : 두 개의 비트가 모두 1일 때 1을 반환
      1) 00001111
      2) 00010100
      → &일 때, 00000100 을 반환​
    • | 연산자 (비트 단위 OR) : 두 개의 비트 중 하나라도 1이면 1을 반환
    • ^ 연산자 (비트 단위 XOR) : 두 개의 비트가 서로 다른 경우에 1을 반환
    • ~ 연산자 (비트 단위 NOT) : 비트를 0에서 1로, 1에서 0으로 반전시킴. '보수연산'이라고도 불림

    +) 음의 정수 크기 확인할 때

    : 2진수로 표현된 음의 정수는 양의 정수와 달리 그 값의 크기를 바로 계산하기가 쉽지 않음. 이러한 경우에는 2의 보수법을 사용해 크기를 확인해야 함. (보수 후 +1 하기)

    << 연산자 : 비트의 왼쪽 이동 (shift)

    8 << 2 : 정수 8의 비트열을 2칸씩 왼쪽으로 이동시킨 결과를 반환
    → 00001111 일 경우, 2칸 이동하면 00111100
    • 이동으로 인해 생기는 오른쪽 빈칸은 0으로 채워지고, 왼쪽 비트들은 버려짐. 즉, 왼쪽으로 1칸씩 이동할 때마다 정수의 값은 두 배가 되고, 오른쪽 이동시에는 2로 나누어짐.

    >> 연산자 : 비트의 오른쪽 이동 (shift)

    • 만약 값이 음수인 경우 CPU에 따라서 값이 달라짐. 음의 값 유지를 위해 1을 채우는 CPU도 있고, 상관없이 0을 채우는 CPU도 있기 때문. (보통 1로 채움)

    'C' 카테고리의 다른 글

    [C] 반복문  (0) 2021.12.08
    [C] 상수 (Const)  (0) 2021.12.08
    [C] 변수 (Variable)  (0) 2021.12.08
    [C] 자료형 (Data Type)  (0) 2021.12.08
    [C] 함수 (Function)  (0) 2021.12.08

    댓글

leejiwonn