본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #23 - 식

안녕하세요. 이번에는 식에 관련된 내용을 다뤄볼까 합니다. 함수를 소개하다가 뜬금없이 나오긴 했지만

예전에 자세하게 설명해드리지 못하고 놓친부분이라 이번에 제대로 설명하고 가려고 합니다.


저번에 배운 연산자와 연결되는 내용이라고 볼수 있기때문에 안보셨다면 먼저 보는걸 추천합니다.

6강 연산자 - http://dokkiblog.tistory.com/22



식에는 결과값이 나와야합니다.

우리가 아는 대입연산자같은것도 모두 결과가 있습니다.


대입연산자같은 경우에는 우측의 값을 좌측에 저장한 후에 우측의 값이 결과로 남게됩니다.


a = b = 50

이런 코드같은 경우에도 b = 50이 진행된 후 50이 남게되서

b에 50이 저장된 후 a = 50이란 식이 남게되고 a에도 50이 저장됩니다.


결합 순서에 대해서는 저번 6강에서 연산자를 배울때 연산자 우선순위 표를 봤었습니다.

연산자에도 우선순위가 있고 그에 따라서 순서가 정해져서 계산되지요. 수학에서 덧셈이랑 곱셈이 있으면 곱셈을 먼저 계산하는거랑 같다고 보시면 됩니다.

근데 같은 우선순위의 연산자들이 있을경우 결합법칙에 맞춰서 순서가 정해집니다. a = b = 50같은경우에는 결합법칙이 오른쪽에서 왼쪽이기때문에 오른쪽 먼저 묶여서 계산된겁니다.



어쨌든 이런식으로 식의 우선순위와 결합방향을 생각하고 결과가 남는다는 점을 기억해주시면 됩니다.

그리고 이런점을 고려했을때 다음과같은 식은 수학에서 보던 식과 다릅니다.




수학에서 0 < a < 100 가 있을경우 a는 0부터 100 사이라는 뜻이 됩니다.

하지만 이런 식은 c언어에서는 a가 0~100 사이에 있다는 뜻이 되지 않습니다.

0 < a가 먼저 계산되서 참이기때문에 1 (true)가 남게되고 1 < 100을 비교해서 1이 남게됩니다.

수학에서 알던것과는 약간 차이가 있죠. 그래서 수학에서 배운것을 그대로 프로그래밍으로 옮기려하면 다음과같은 경우에 말도안되는 일이 나버리죠.



80 < 50 < 100이 참이라니? 수학에서는 말도 안되는 얘기죠.

하지만 c언어에서는 참이 됩니다.


이런식으로 수학에서 알던것과는 약간 차이가 있다는점을 생각하면서 프로그래밍 해주시면 됩니다.