반응형

c언어 다양한 연산자(대입, 산술, 증감, 관계, 논리 연산자)

반응형

C언어에는 다양한 연산자가 있습니다. C언어에 있는 다양한 연산자에 대해서 알아보겠습니다. 

 

연산자란?
프로그램을 짤 때 변수나 값의 연산을 위해 사용되는 부호.

프로그래밍을 할때 연산을 하기 위해 '+', '-', '*', '/' 등의 부호를 사용하게 되는데 이러한 부호에 따라서 어떻게 계산이 되어지는지 확인을 해보겠습니다. 

 

산술 연산자(+,-,*,/,%)

산술식을 구성하는 요소! 바로 수학에서 수치계산을 할때 필요로 하는 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)를 가르켜 산술 연산자 라고 이야기 합니다. 

 

#include <stdio.h>

// 산술 연산자 

int main(void)
{
	int a = 2; 
	int b = 1;

	printf("더하기 : %d\n", a + b);
	printf("빼기 : %d\n", a - b);
	printf("곱하기 : %d\n", a * b);
	printf("나누기 : %d\n", a / b);
	printf("나머지 : %d\n", a % b);

	return 0;
}

 

대입 연산자(=)

C언어에서의 대입 연산자는 '=' 표기를 사사용하게 됩니다. 일반적인 '=' 표기는 equals sign 등호라는 뜻을 가지고 있고 equals라고 하면 동등한 이라는 뜻을 가지고 있어 보통은 A = B 처럼 A와 B는 같다 라는 식으로 사용하게 되지만 C언어에서의 '='는 같다가 아닌 대입한다 라는 뜻을 가지고 있습니다. 

 

일반적인 산술은 앞에서 뒤로 계산을 합니다 즉 A와 B를 더한다가 되어지지만 대입연산자는 반대로 뒤에서 먼저 B를 A에 대입한다 라는 식으로 쓰여지게 됩니다. 그렇다면 대입 연산자는 어디에 쓰여지는가? 

 

대입 연산자는 가장 많이 사용되는 연산자입니다. 이전에 배웠던 변수를 선언하고 선언한 변수에 값을 입력할때 그동안 int a = 2; 이런식으로 사용해왔었습니다. 이때 int a는 2와 같다가 아닌 int a에다 2를 대입한다 라는 뜻으로 앞으로 해석하시면 됩니다. 

 

대입 연산자는 산술 연산자와 합해져서 다양한 형태로 사용할 수 있습니다. 

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

산술 연산 A = A + B와 산술 연산자와 합쳐진 대입 연산자 A +=B의 결과값은 같습니다. 

먼저 산술 연산자 A = A + B를 쪼개어 보면 A값에 B값을 더해 A에 대입해라 라는 뜻이고 A += B는 A값을 B값만큼 증가시킨다로 결과 값은 둘다 같아지게 됩니다. 

 

즉 A값을 가지고와서 B값을 더하고 다시 A값에 대입하는 식을 간략하게 A += B로 표현한 것입니다. 

증감 연산자(++, --) 

증감 연산자는 말 그대로 ++(증가 연산자), --(감소 연산자)로 값 하나를 증가시키거나 감소시키는 연산자입니다. 

증감 연산자의 사용은 피연산자가 앞에 붙어 있는 (++a, --a)경우에는 먼저 값을 증가 또는 감소시키고 나서 연산을 진행하는 것과 피연사의 뒤에 붙어(a++, a--) 연산을 진행 한 다음 증가 또는 감소시키는 방법이 있습니다.

 

결과를 보면 a++로 증가시킨 첫번째 10라인에서의 출력은 1이지만 다음 printf를 통해서 출력한 a의 값은 2가 출력되어있는 것을 확인할 수 있습니다. ++b는 두개의 결과 모두 2로 동일한 것을 볼 수 있습니다. 

이것은 (a++ 선 연산 후 증가)와 (++b 선 증가 후 연산)의 연산방식입니다.

 

쉽게 이야기 하면 10번 줄에서 a에 값을 하나 증가시키는 연산 작업을 수행하지만 값은 바꾸지 않고 연산만을 수행하는 것이고 13번 줄에서 b는 연산은 수행하지 않았지만 값을 미리 증가시키고 연산을 했기 때문에 이미 13번 줄에서 미리 증가된 2의 값을 가지고 있게 된 것입니다. 

 

a++ 와 ++a를 학교생활을 통해서 이해해보자 

먼저 a++ (선 연산 후 증가) 

1. a학생이 학교에 등교를 했다! (선 연산 (출석체크를 안해서 아직은 출석이 안됨) )
2. a학생이 교실에 들어와 출석체크를 했다(후 증가 (출석체크를 해서 출석완료)) 

학생이 교실에 앉을때까지 학교에 이미 출석을 한 상태이지만 출석체크를 안해서 증가를 시켜주지 않았다. 

반대로 

++a (선 증가 후 연산) 
1. a학생은 늦잠을 자서 지각을 합니다. 출석체크 시간 선생님한테 전화를걸어 학교에 다왔다 라고 전화를 합니다. 선생님은 조금있으면 도착하는 a학생의 출석을체크해줍니다. (선 증가)  
2. a학생이 학교에 도착합니다. (후 증가) 

 

관계 연산자(<,>,==,!=,<=,>=) 

관계 연산자 말 그대로 관계를 따지는 연산자로 a와 b의 변수가 같은지 혹은 어느쪽이 더 큰고 작은지를 비교해주는 견산자 입니다. 두개의 피연산자를 비교하는데 쓰이는 관계 연산자를 두고 비교 연산자라고도 이야기합니다.

관계연산자의 사용
<            A < B         A가 B보다 작은가?  
>            A > B         A가 B보다 큰가?
==          A == B       A가 B와 같은가?
!=           A != B         A가 B와 같이 않은가?
<=          A <= B       A가 B보다 작거나 같은가?
>=          A >= B       A가 B보다 크거나 같은가?

 위에 대입연산자를 할때 '='는 대입한다라는 뜻이라고 이야기 했습니다. C언어에서 같다, 동등하다의 의미를 가지기 위해서는 == 두개를 사용해 같다라고 표기하게 됩니다. 

 

관계연산자의 결과는 참(true)과 거짓(false)로 표현되어지는데 참(true)은 1로 거짓(false)은 0으로 표현되어집니다.

 

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

논리 연산자는 and(&&), or(||), not(!)를 표현한 연산자 입니다. 

 

and의미의 논리 연산자 '&&' 피연산자 모두가 참(true)이면 1을 반환합니다

or의미의 논리 연산자 '||'은 피연산자 중 하나라도 참(true)이면 1을 반환합니다.

not의미의 논리연산자 '!'는 피연산자가 참(true) 1이면 거짓(false) 0 를 거짓(false) 0이면 참(true) 1을 반환해줍니다. 

 

 

비트 단위 연산자(~, &, ^, |, <<, >>) 와 콤마 연산자 (,)

비트 단위 연산자는 0 또는 1의 비트를 연산할때 사용하는 연산자로 나중에 2진법을 할때 따로 이야기를 해보겠습니다. 

 

콤마 연산자는 둘 이상의 변수를 동시에 선언하거나, 순서대로 실행되어야 되는 두개 이상의 문잘을 한줄에 선언해야 할 경우에도 사용됩니다. 또한 둘 이상의 인자를 함수로 전달할때도 사용됩니다. 

변수를 선언할때 콤마 연산자를 활용해서 한줄에 여러개의 변수를 이어서 선언할 수 있고 printf 또한 이어서 사용이 가능하게 하고 printf 속에서도 여러개의 인자를 넘길때 사용되기도 합니다. 

 

연산자의 우선 순위

연산자의 우선순위는 괄호와 배열 연산자가 가장 우선되고 그 뒤로는 피연산자의 개수에 따라서 연산우선순위가 높은것을 확인할 수 있습니다. 단항 연산자 - > 이항 연산자 -> 삼항 연산자 순서로 볼 수 있고 이항 연산자에서도 곱하기와 나누기가 더하기 빼기보다 우선순위가 높은 것을 확인하실 수 있습니다. 

반응형

댓글

Designed by JB FACTORY