본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #6 - 연산자

안녕하세요.

c언어에는 다양한 연산자가 있습니다.

이미 몇가지는 알고계실것이고 이미 전 강좌에서도 나왔습니다.


대입연산자와 산술연산자입니다.


1.대입연산자




이런식으로 오른편에 있는것을 왼편에 대입한는것을 말합니다.

변수를 배울때 이미 봤던것이죠.


결합순서는 왼쪽 <- 오른쪽

결합순서는 어느곳부터 결합하냐를 말하는겁니다

오른쪽에서 왼쪽이기때문에

a = b = 10이 있을경우 오른쪽부터 진행해서

b = 10을 진행한 다음 a = b를 진행합니다.


대입연산자는 연산을 끝낸후에 그자리에 오른편에 있던 값이 남아있게됩니다. 즉

a = b = 10을 하면 b = 10을 하고 b의 자리에 10이 남아있게됩니다.

그래서 a = 10이 되고 a에도 10이 대입됩니다.


2.산술연산자

연산자 

연산의 예

연산의 결과

의미 

 +

 1 + 5

 6

 덧셈

 -

 5 - 2

 3

 밸셈

 *

 5 * 5

 25

 곱셈

 /

 10 / 2

 5

 나눗셈

 %

 10 % 3

 1

 나머지


결합순서는 왼쪽 -> 오른쪽

연산을 끝낸후에 그 자리에 연산의 결과가 들어간다고 생각하시면 됩니다.

printf("%d", 3 + 5);를 출력할경우 






3.기타 대입 연산자


단순히 대입연산자와 산술연산자를 합쳐놓은것이라 고 보면 됩니다.

덧셈으로 예를 들자면 다음과 같습니다

물론 덧셈뿐만 아니라 다른것들도 모두 됩니다.


4.증가 감소 연산자

 연산자

예 

 의미

++ 

 num++

 ++num

 값 1 증가

 --

 num--

--num

 값 1 감소


++를 붙이면 값이 증가하고 --를 붙이면 감소합니다. 간단하죠.




근데 여기서 주의하실점이 있습니다.


연산자를 앞에붙이냐와 뒤에붙이냐에 따라서 순서가 달라집니다.

num++의 경우 먼저 증가하고 연산하는데

++num의 경우 연산 하고 증가합니다. 즉








이렇게 할경우 b의 값이 1 증가하고 a에 대입합니다.

출력결과는

a : 11

b : 11


이렇게됩니다. 하짐나 뒤에붙일경우에는 다르게되겠죠



출력결과는

a : 10

b : 11이 됩니다


5.관계연산자

컴퓨터는 모든 정보를 0과 1로 표현합니다.

참과 거짓도 1과 0으로 나눌수있죠

true (참)는 1이고 false (거짓)는 0입니다.


연산자 

예 

결과 

의미 

 >

 5 > 3

 true

 좌가 우보다 큰가

 <

 5 < 3

 false

 좌가 우보다 작은가

 ==

 5 == 5

 true

 좌와 우가 같은가

 !=

 5 !== 5

 false

 좌와 우가 다른가

 <=

 5 <= 6

 true

 좌가 우보다 작거나 같은가

 >=

 5 >= 5

 true

 좌가 우보다 크거나 같은가



연산을 하고 그것이 참일경우 true ( 1 )이 되고 거짓일경우 false ( 0 )이 됩니다.


를 입력할경우 출력결과는



거짓일경우 0 참일경우 1이되어서 나오죠.


6.논리연산자


연산자 

예 

 결과

의미 

 && ( and )

 true && true

 true && false

 false && false

 true

 false

 false

 두개 모두 참이여야만 참이됨.

 || ( or )

 false || true

 false || true

 false || false

 true
 true

 false

 둘중 하나라도 참일경우 참이됨.

 ! ( not )

 !true

 !false

 false

 true

 참과 거짓을 거꾸로 바꿈

(false->true ,  true->false)



논리연산자는 말로 해석하면 쉽습니다.


&& (and)의 경우 A 그리고 B가 참이다.

|| (or)의 경우 A 또는 B가 참이다.

이 말이 참일때 true가 되는겁니다.



! ( not )의 경우 A가 아니다.

즉 부정하는것이죠. 부정할경우 반대로 뒤집힙니다.


간단하게 예를들면


a = 8 > 5 && 7 > 5;


이렇게 입력할경우 8>5는 참이고 7>5도 참이기때문에 결국 a는 true ( 1 )가됩니다.


7.비트연산자

연산자 

의미 

 비트단위 AND

 비트단위 OR 

 비트단위 XOR

 비트단위 NOT 

<< 

 왼쪽으로 비트 이동

 >>

 오른족으로 비트 이동  


저번에 변수를 배울때 비트를 배웠습니다


0000 0000

8개의 비트가 있는 이것이 1바이트입니다.

위의 배운 논리연산자의 비트버전이라고 보시면 됩니다.


예를 들어서 설명드릴게요.

A = 1100 1100

B = 1010 1010

A & B = 1000 1000 (둘다 1일경우에만 1이됨.)

A | B = 1110 1110 (둘중 하나라도 1이면 1이됨)

A ^ B = 0110 0110 (둘이 다를경우 1이됨)

~A = 0011 0011 (0과 1을 뒤집음)

A<<2 = 0011 0000 (2칸씩 왼쪽으로 이동)

A>>2 = 0011 0011 (2칸씩 오른쪽으로 이동)


이렇게됩니다.

<<,>>와 같이 이동하는 연산자를 시프트연산자 라고 하는데 그림으로 좀더 설명해드리겠습니다.





이런식으로 이동하게됩니다.


8.콤마연산자


콤마연산자는 연산이 목적이 아니라 구분을 목적으로합니다.

printf("안녕"), printf("친구들아");

이런식으로 한번에 두개의 문장을 쓸수있습니다.

int a = 0,b = 1; 이런식으로 둘이상의 변수선언도 가능하고요.

함수호출시에 인자를 구분할때도 사용됩니다.


콤마연산자를 사용시 둘 이상의 인자가 한문장에 들어갈때 두 인자는 구분되어 있는 인자입니다.



9.우선순위

연산자 우선순위 표입니다.


우리가 수학문제를 풀때도

5 + 2 x 3을 계산할때 곱셈을 먼저 계산하잖아요?

연산자에도 우선순위가 있는겁니다.

a = a + 5

여기에서 +가 우선순위가 높기때문에 먼저 a에 5를 더한후에 그것을 a에 대입하는겁니다.