본문 바로가기

C Programming

연산자

산술 연산자



  • 연산자의 종류

더하고 빼고 곱하고 나누는 동작을 하는 것들이 연산자.



  • 산술 연산자

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

워낙 일상에서 많이 쓰이는 것이므로 패스.

  • 대입 연산자

대입이란 변수에 어떤 값을 집어넣는 동작이며 대입 연산자는 변수의 값을 변경할 때 사용.

수학 문제 풀듯이 a = 1 + b; 좌변 우변으로 나눠서 우변의 것을 좌변에 대입한다 라고 생각하면 됨. 

  • 증감 연산자

증감 연산자는 피연산자를 1씩 증가시키거나 감소시킴.

a = a + 1

a += 1

a++

이 세 가지는 같은 의미(1증가)를 지니고 있음.


증감연산자 중 ++a or a++이라는 연산자가 있는데 이것이 가장 주의해야할 연산자임.

전위형(prefix) : ++a, --a 같은 경우는 무조건 바로 + 1, -1을 시켜준다.

후위형(postfix) : a++, a-- 같은 경우는 문장이 끝나는 시점 (;)세미콜론을 기점으로 +1, -1이 된다.



논리 연산자



  • 관계 연산자

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



  • 논리 연산자

논리 연산자는 주로 관계 연산자와 함께 사용되며 두 개 이상의 조건식을 결합하여 하나의 진리값을 만들어 냄.



  • 비트 연산자

비트 연산자는 논리 연산자와 비슷하지만 비트를 연산 대상으로 한다는 점이 조금 다름.



  • 쉬프트 연산자

쉬프트 연산자는 비트들을 지정한 수만큼 좌우로 이동시킴.

>> : 오른쪽으로 비트 옮김.

<< : 왼쪽으로 비트 옮김.

  • 쉬프트 연산과 곱셈

비트를 이동시키는 쉬프트 연산은 곱셈과 나눗셈의 대용으로 사용할 수 있음.

<< 1 : 비트를 왼쪽으로 한칸씩 움직이면 2배의 수가 됨.

>> 1 : 비트를 오른쪽으로 한칸씩 움직이면 2로 나눈 수를 얻을 수 있음. 

  • 회전 연산

회전 연산은 쉬프트 연산과 유사한 비트 조작 명령임.

쉬프트는 비트를 선형으로 움직이지만 회전 연산은 원형으로 이동시킴.

_rotl, _rotr 함수로 제공.

비트맵 이미지를 회전시킬 수도 있고 특징으로 원래 값으로 복구가 가능하다는 점.


기타 연산자



  • 삼항 조건 연산자

삼항 조건 연산자는 특이하게도 피연산자를 세 개나 가지는데 다른 언어에는 없은 C언어의 독특한 연산자임.


삼항 조건 연산자 형식

(조건식) ? TRUE : FALSE;


if 조건문과 똑같은 결과를 가져오지만 이 연산자 자체에 if 조건문이 들어가 있기 때문에 굳이 삼항 연산자를 이용할 필요는 없다고 생각.

  • 쉼표 연산자

쉼표 연산자는 쉼표 기호(,)를 사용하는데 모양만으로 보면 구두점같이 생겨서 연산자가 아닌 것처럼 보이기도 함. 하지만 분명히 연산자임.

ex) for( i = 0, j =0; i < 9; i ++, j++){...}

  • sizeof 연산자

sizeof 연산자는 피연산자로 주어진 타입 또는 변수의 크기를 계산한ㅁ.


sizeof 형식

sizeof(타입 또는 변수)

  • 캐스트 연산자

캐스트 연산자는 수식 내에서 변수의 타입을 강제로 다른 타입으로 바꿔줌.


캐스트 형식

(타입) 변수

타입 (변수)



연산 규칙


  • 연산 순위



  • 결합 순위

결합 순서는 수식 내에 같은 종류의 연산자가 있을 때 어떤 방향의 연산을 먼저 수행할 것인가를 지정함.


  • 산술 변환

C언어는 데이터 타입이 조금 다른 변수끼리도 자동으로 변환이 가능하면 연산을 허용.