연산자의 종류

  • 데이터 : 불규치학게 널려 있는 여러가지 형태의 수치나 문자열. 사실적인 정보.
    정보 : 데이터를 가공하여 사용할 수 있도록 정리된 유용한 것

     기능별 종류 

     연산자

     산술 연산자

     + - * / %

     부호 연산자

     + -

     대입 연산자

     = 복합 대입 연산자

     관계 연산자

     == != <= < >= > 

     증감 연산자 ++ -- 
     포인터 연산자 * & [] 
     구조체 연산자 . -> 
     논리 연산자 || && ! 
     비트 연산자 | & ~ >> <<

     삼항 조건 연산자

     : ?

     쉼표 연산자

     ,

     sizeof 연산자

     sizeof

     캐스트 연산자

     (type)type()

     괄호 연산자

     ()

     C++ 연산자

     new delete :: .* ->*



산술 연산자

  • 산술 연산자
        - 더하고 곱하고 빼고 나누는 가장 기본적이고 또한 가장 많이 사용 되는 연산자

        - 일상해서 주로 사용하는 연산자
        - +, - 기호와 평상시에는 X를 쓰지만 알파벳과 비슷해 *를 사용
        - ¸ 기호를 사용하지만 없어서 / 를 이용 
        - /의 경우 피연산자의 파입에 따라 다르다
        - 피연산자가 모두 정수형이면 결과도 정수형
        - 피연산자 중 실수형이 있으면 결과도 실수형이다.

  • 대입연산자
        - 변수에 어떤 값을 집어 넣는 동작이며 대입 연산자는 변수의 값을 변경할 때 사용
          (예시 : i=1 / i 라는 값에 1을 대입한다 라는 뜻)
        - 좌변에는 항상 변수만 올 수 있다.
          (실제적인 메모리를 점유하고 있고 값을 바꿀 수 있는 대상)
          1=a+2; / a+b = 4 와 같은 형태는 불가능.
        - 연산자의 리턴값
        


a=5; b=5; c=5; 를 줄이면


a=b=c=5; 와 같은 형태로 줄일 수 있다.

  • 복합 대입 연산자 
        - 대입연산자와 다른 연산자가 결합된 연산자
         a = a+3; => a+=3;

  • 증감 연산자
        - 피연산자를 1씩 증가 시키거나 감소 시킨다
        - 루프의 제어 변수처럼 순서대로 어떤 작업을 할 때는 변수값을 하나씩 증감시키는 경우가
           많아 별도의 연산자 장치가 마련 (++ : 증가, --  : 감소)
        - 전위형(Prefix) : 증감연산자가 피연산자 앞에 위치 ( ++a, --a )
        - 후위형(Postfix) : 증감연산자가 피연산자 뒤에 위치 ( a++, a-- )
        - 다른 언어에는 없는 C 언어의 아주 독특한 연산자이며 사용해 보면 아주 편리
       


논리 연산자

  • 관계 연산자
        - 피연산자를 두 개 취하는 이항 연산자이며 좌변과 우변을 비교하여 같은지, 다른지, 다르면
          어느 쪽이 더 큰지 조사


 연산자 

 조건

 ==

 좌변과 우변이 같다.

 !=

 좌변과 우변이 다르다.

 >

 좌변과 우변보다 크다.

 <

 좌변과 우변보다 작다.

 >=

 좌변과 우변보다 크거나 같다.

 <=

 좌변과 우변보다 작거나 같다.


  • 논리 연산자
        - 주로 관계 연산자와 함께 사용되며 두 개 이상의 조건식을 결합하여 하나의 진리 값을 만든다
        - ! 연산자는 조건식 하나를 피연산자로 취하는 단항연산자로서 조건식을 반대로 바꾼다
          결과 : 거짓 => 참 / 참 => 거짓

 연산자 

 조건

 !

 좌변과 우변이 같다.

 &&

 좌변과 우변이 다르다.

 ||

 좌변과 우변보다 작거나 같다.


- && 연산자와 || 연산자는 두 개의 논리식을 피연산자로 가지는 이항 연산자
  두 논리식의 값을 정해진 규칙에 따라 결합하여 하나의 진리 값(아래 참고할 진리표)


 좌변 논리식 

 우변 논리식

 && 연산자

 || 연산자

 1

 1

 0

 0




  • 비트 연산자
        - 논리 연산자와 비슷하지만 비트를 연산 대상으로 한다는 점이 다르다.
        - 비트란 기억장치의 최소 단위로서 1 또는 0을 기억하면 8개의 비트가 모여야 1바이트

 연산자 

 설명

 ~

 비트를 반전 시킨다. 

 & 대응되는 비트가 모두 1일 때 1이다. 
 | 대응되는 비트가 모두 0일 때 0이다.

 ^

 두 개의 비트가 달라야 1이다. 

 <<

 지정한 수 만큼 왼쪽으로 비트들을 이동시킨다. 

 >>

 지정한 수 만큼 오른쪽으로 비트들을 이동시킨다. 


 b1

 b2

 b1 & b2

 b1 | b2

 b1 ^ b2

 ~b1

 0

 1

 0  0 

 0

 1

 0

 1

 0  1  0  1 

 1

 0 

 0

 1

0

 0

 1

 1 

 1  1 

0

 0


  • 쉬프트 연산자
        - 비트들을 지정한 수 만큼 좌우로 이동시킨다.
        - >> 연산자는 오른쪽으로 이동시키며 << 왼쪽으로 비트들을 이동시킨다.
       


<우측이동 쉬프트>                               <좌측이동 쉬프트>

  • 쉬프트 연산과 곱셉
        - 쉬프트를 왼쪽으로 한칸 해보면 입력한 수의 정확하게 2배 되는 값이
          출력 5를 입력하면 10, 100을 입력하면 200이 출력
          a << b == 1 * 2^b
            

  • 회전 연산
        - 쉬프트 연산과 유사한 비트 조작 명령
          쉬프트는 비트를 선형으로 이동시키는데 비해 회전 연산은 원형으로 이동시킨다.
          비트 이동에 의해 밀려나는 비트는 버려지지 않고 반대쪽으로 다시 이동.
          <rotl, rotr 함수 사용>



기타 연산자

  • 삼항 조건 연산자 : (조건식)? 값1:값2
    다른언어에는 없는 C언어의 톡특한 연산자
    조건식의 값이 참이면 값1 거짓이면 값를 리턴
    if문을 이용해서도 변환이 가능하다.

  • 쉼표연산자 : , 사용, 
    피연산자로 양쪽에 두 개의 표현식을 취해 좌변->우변 순서로 평가하고 우변의 연산 결과를 리턴
    두 개의 표현식을 하나로 합칠 수 있다.

  • sizeof 연산자
    sizeof(타입 Or qustn)
    피연산자로 int, double같은 타입이나 변수를 이용하거나 상수를 사용할 수도 있다.

  • 캐스트 연산자
    (타입)변수 => C언어타입
    타입(변수) => C++ 타입
    수식 내에서 변수의 타입을 강제로 다른 타입으로 변경


연산 규칙

  • 연산 순위

    순위

    연산자

    결합순서

    1

    ( ) [ ] -> .

    왼쪽 우선

    2

    ! ~ ++ -- + -(부호) *(포인터) & sizeof 캐스트

    오른쪽 우선

    3

    *(곱셈) / %

    왼쪽 우선

    4

    + -(덧셈, 뺄셈)

    왼쪽 우선

    5

    << >>

    왼쪽 우선

    6

    < <= > >=

    왼쪽 우선

    7

    == !=

    왼쪽 우선

    8

    &

    왼쪽 우선

    9

    ^

    왼쪽 우선

    10

    |

    왼쪽 우선

    11

    &&

    왼쪽 우선

    12

    ||

    왼쪽 우선

    13

    ? :

    오른쪽 우선

    14

    = 복합대입

    오른쪽 우선

    15

    ,

    왼쪽 우선


  • 결합 순서
        - 수식 내에 같은 종류의 연산자가 있을 때 어떤 방향의 연산을 먼저 수행할 것인가를 지정
        - 다른 종류의 연산자에 대한 실행 순서인 반면 결합순서는 같은 연산자 또는 같은 순위
            내의 다른 연산자의 실행순서 지정
    (double)(unsigned)i; 의 경우 unsigned => double

  • 산술 변화
        - 데이터 타입이 조금 다른 변수 끼리라도 자동으로 변호나 가능한 연산을 허용



연산자는 산술, 논리, 기타 등으로 구성된다

연산 규칙에는 순위와 결합순서 산술변화 등으로 구성된다.                                                                     

출처 : Soen(soen.kr)



'언어 > C' 카테고리의 다른 글

기억부류  (0) 2016.03.19
함수와 프로시저  (0) 2016.03.18
제어문  (0) 2016.03.13
getch / getche / getchar / putchar / puts  (0) 2016.03.11
printf 서식문자  (0) 2016.03.10

+ Recent posts