ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 연산자와 수식 - 바로 실행해보면서 배우는 C언어
    CS/C언어 2019. 12. 23. 07:05

    기본 연산자 + - * / %

    사칙연산 연산자

     

    증감 연산자 ++ --

    변수에 담겨있는 값을 증가시키거나 감소시키는 연산자. 전위와 후위로 나뉘어짐

    전위 증감 연산자 : 값을 먼저 증가시키거나 감소시킨 후에 코드 실행 (++a)

    후위 증감 연산자 : 코드 실행 후에 값을 증가시키거나 감소시킴. (a++)

     

    관계 연산자

    ==같다

    != 같지 않다

    / true : 1, false : 0

     

    논리 연산자

    논리곱 연산(&&), 논리합 연산(||)

     

    복합 대입 연산자 +=, -=, ...

    연산과 동시에 변수에 대입시키는 연산자

     

    비트 연산자

    2진수 값을 이용해 연산하는 연산자

    비트 연산은 정수/정수로 변환 가능한 타입만 연산 가능. (실수, 포인터 등은 X).

    비트 단위로 계산하기 때문에(=비트 단위에서 직접 조작하기 때문에) 일반적인 사칙연산 연산자보다 훨씬 속도가 빠르다. 적절하게 사용하면 메모리 공간의 효율성을 높이고 연산 수를 줄일 수 있다.

    (*비트 : 컴퓨터에서 사용할 수 있는 최소 단위로, 0과 1로 이루어지는 2진수를 저장한다.)

     

    & (AND 연산) : 두 개의 비트가 모두 1일 때만 1을 반환.

    논리 연산자 &&와는 다름. 논리 연산은 true/false를 반환하지만 비트 연산은 값을 반환함.

    주소값을 가리키는 &연산자와도 다름. 주소값을 나타내는 &연산자는 단항연산자이지만, 비트연산자는 두개 이상의 피연산자를 필요로 함. ex- a & b

    [Ex]

    0000 1010 = 10

    0000 0110 = 6

    0000 0010 = 2

    10 & 6 → 2 반환.

     

    | (OR 연산) : 두 개의 비트 중 하나라도 1이면 1을 반환.

    ^ (XOR 연산) : 두 개의 비트가 다르면 1을 반환.

    ~ (NOT, 단항 연산자) : 한 값의 비트를 모두 반전시킴.

     

    비트연산자의 대입연산자 : &=, |=

     

     

     

    비트 이동 연산자

    << 연산자(왼쪽 shift) : 지정한 횟수대로 비트의 자리를 왼쪽으로 이동시키는 연산자.

    이동해서 생기는 오른쪽 빈 비트들은 0으로 채워지며, 제일 왼쪽에서 밀려나는 비트들은 버려진다.

    한 칸 이동할 때마다 값은 2배가 된다. x2의 1승, x2의 2승, x2의 3승, x2의 4승...

    ⇒ n칸 이동했다면 2의 n승을 곱하면 된다. 따라서 2의 n승을 곱하는 연산을 할때, 비트 왼쪽 이동연산으로 대체하면 일반 사칙연산보다 속도가 빠르다.

     

    ※ char형은 8비트지만 int형은 32비트이기 때문에 왼쪽으로 비트 이동을 할 때 잘리는 크기가 다르다.

    ※ unsigned형과 달리 부호비트가 있는 자료형(signed* 등)은 MSB의 자리로 비트가 이동하면 보수 연산을 하게 된다.

     

    >> 연산자(오른쪽 shift) : 지정한 횟수대로 비트의 자리를 오른쪽으로 이동시키는 연산자.

    << 연산자와 정확히 반대.

     

    ※ MSB 주의!

    signed자료형이고 음수일 때(맨 왼쪽 값이 1일 때) 오른쪽으로 이동하면서 생기는 빈 비트의 경우, 음수를 유지하기 위해 빈 비트들을 1로 채우는 CPU도 있고, 음수와는 상관없이 무조건 0을 채우는 CPU도 있다.

    EX) 1111 0000를 오른쪽으로 두 칸 이동 → 0011 1100(0으로 채우기) or 1111 1100(1로 채우기)

     

    ※ 음수를 이진수로 변환하기

    -16 : 1111 0000

    (첫번째 자리는 MSB 비트 = 부호 자리. 두번째 자리부터 2의 1승, 2의 2승, 2의 3승...)

     

    *signed char : 부호 있는 정수. 8비트 변수. 맨 왼쪽 비트는 부호비트. 부호비트는 MSB(Most Significant Bit)라고 부르며, 0이면 양수, 1이면 음수를 나타냄. 음수일 경우 "보수연산"을 하게 됨. (C언어 보수연산 검색)

     


    ※ 출처 : 바로 실행해보면서 배우는 C언어, 4강 연산자와 수식

    댓글

Designed by Tistory.