C 언어(7) - 연산자 이해하기2

C 언어 강의, 관계, 논리, 조건 연산자

Featured image

🔚 짧게 하는 복습

✅ 1. 산술 연산, 부호 연산자, 대입 연산자를 알자

✅ 2. 비트 연산자를 알자.

✅ 3. 대입 연산자, 특히 축약 대입연산자를 알자.

혹시 기억이 안 난다면, 다시 돌아가자


오늘은 남은 연산자인 관계, 논리, 조건연산자를 다룰 것이다.

우선은 우리에게 익숙한 관계 연산자부터 보자


관계 연산자

관계 연산자란 우리에게 부등호로 익숙한


\( > \), \( < \), \( \geq \), \( \leq \), \( = \), \( \neq \)

이다.

그런데 컴퓨터에서 조금 표기가 다른 것들이 있다. 우선


\( \mathbf{\geq} \), \( \mathbf{\leq} \)

는 각각 >=, <=로 표시한다.

또한


\( = \)

은 C언어에서는 우리가 저번 시간에 대입연산자라고 배웠다. 그렇기에 C에서는 ==로 표시한다.


\( \neq \)

는 !=로 표시한다.

이 연산자들은 양쪽의 값이 부등호를 만족하면 참(1), 아니면(0)을 반환한다.

코드를 실행해서 확인해보자.

직관적이고 이해하기 쉽다.


논리연산자

논리연산자는 저번에 다룬 비트연산과 굉장히 비슷하다.

&&, ||, ! 3가지로 나뉘고 &&는 and 연산, ||는 or 연산, !은 not 연산이다

컴퓨터에서는 참과 거짓을 정수로 나타낼 수 있는데, 거짓은 0 참은 0이 아닌 모든 수로 나타낼 수 있다.

&&는 연산자 양쪽의 값이 참일때만 참(1), 아니면 거짓(0)

||는 한 개라도 참이면 참(1), 아니면 거짓(0)

!은 참이면 거짓(0)을, 거짓이면 참(1)을 반환한다.

역시나 비트연산을 연습했다면 어렵지 않게 이해할 수 있다.


조건연산자

조건연산자란 이때까지와는 다르게 3개의 값이 필요한 연산자이다.

(조건) ? (참일 때 결과) : (거짓일 때 결과)

의 형식으로 나타나고, 말 그대로 조건이 참이면 참일 때의 결과를 돌려주고, 거짓이라면 거짓일 때의 결과를 알려준다.

이런 코드를 만들 수 있다는 것이다.

그렇다면 이건 어떨까?

3 ? 3 : 4

아까 언급한 것처럼 컴퓨터에서는 0이 아닌 모든 수가 참이기 때문에, 3이 결과가 된다.

우리가 지금까지 모든 연산자를 배웠다.

그런데 아직 이들을 조합하는 방법에 대해 배우지 않았다.

가령 이런 코드가 있을 수 있다.

int a = 5, b = 10, c = 3, d = 4, e = 2;

int result = (a > b) && (c <= d) ? (a + b * c - d / e) : (a<<b+2*c);

물론 이렇게 짜면 안 된다. (코드는 항상 간결하고 읽기 쉽게!)

하지만 연산자들 사이에 어떤 순서로 계산해야하는지 규칙을 만들 필요는 느꼈을 것이다.


연산자 우선순위

연산자를 어떤 순서로 연산해야 하는지 정한 것을 연산자 우선순위라고 한다.

위의 우선순위가 높은 연산자부터 수행하고 우선순위가 낮을수록 후에 수행이 된다.

물론 우선순위를 외울 필요는 없다. 보기 쉽게 괄호를 적절히 쓰는 게 최고고, 만약 복잡하다면 우선순위 표를 참고하면 되기 때문이다.


📖 오늘의 핵심(다 알기 전까지는 넘어가지 말자❗)

✅ 1. 관계, 논리, 조건연산자를 알자

✅ 2. 연산자 우선순위를 알자

⚠️ 같다는 =이 아니라 ==이다!

💣 과제, 아까 나왔던

int a = 5, b = 10, c = 3, d = 4, e = 2;

int result = (a > b) && (c <= d) ? (a + b * c - d / e) :` (a<<b+2*c);

이 코드, result 직접 구해보고 프로그래밍을 통해서 확인해보자. (난이도 中)