안녕하세요, C 프로그래밍 언어 열한번째 강의입니다.
오늘은 구체적으로 연산자의 우선순위에 대해 학습하겠습니다.
지난 시간은 연산자 하나씩 이용하여 수식을 만들었습니다. 하지만 모든 계산이 그렇게 간단하게 표현이 되지 않습니다.
예를 들어 5+4*2를 계산해볼까요?
쉽죠?
답은 18일까요, 13일까요.
물론 사칙연산 중 곱셈을 먼저 해야한다는 규칙이 있고, 그 규칙에 따라 4*2를 하고나서 덧셈을 하기 때문에 답은 13입니다.
그 다음은 (5+4)*2를 계산해볼까요?
답은 13일까요, 18일까요.
덧셈보다 곱셈을 먼저 계산해야한다는 규칙보다 더 우선적으로 적용되는 괄호 안의 수식부터 계산하라는 규칙이 있었죠.
그 규칙에 따라 괄호 안의 수식인 5+4를 먼저 계산하고 곱셈을 하기 때문에 답은 18입니다.
이와같이 컴퓨터 프로그래밍에도 수식 계산 규칙이 있답니다.
여러가지 연산자가 있을때 무엇을 먼저 계산하는가는 매우 중요한 문제입니다.
잘 숙달하시길 바랍니다.
가장 우선적으로 계산해야하는 연산자들입니다.
우리가 흔히 알고있는 계산처럼 괄호는 최우선적으로 계산합니다.
그리고 후위 증감 연산자도 최우선순위에 있습니다.
1순위 연산자가 계산을 끝나면 2순위 연산자가 계산이 됩니다.
전위 증감 연산자가 있습니다.
여기서 +, -는 덧셈, 뺄셈이 아닌 숫자의 양수, 음수를 나타내는 부호입니다.
또한 *도 곱셈 표시가 아닌 다른 용도의 연산자입니다.
헷갈리시면 안됩니다.
형식 캐스팅 연산자는 추후에 배우도록 하겠습니다.
드디어, 우리가 잘 알고 있는 사칙연산 중 곱셈, 나눗셈, 나머지 연산자입니다.
이들은 4순위이며, 1,2,3순위의 연산자가 끝나야 계산이 됩니다.
곱셈, 나눗셈, 나머지 연산자가 끝나야 덧셈, 뺄셈이 진행됩니다.
6순위는 비트 연산자이며, 추후에 학습하겠습니다.
7순위는 비교 연산자입니다.
비교 연산자는 참(1) 혹은 거짓(0)을 결과값으로 내보낸다는 걸 기억하시지요?
반드시 중요한 부분이기에 지난 강의를 참조하시길 바랍니다.
8순위도 비교 연산자입니다.
9순위는 비트 연산자입니다.
10순위는 비트 연산자입니다.
11순위는 비트 연산자입니다.
12순위는 논리 연산자입니다.
논리 연산자는 양 쪽의 변수를 참(0이외 값)과 거짓(0)으로 생각합니다.
그리고 결과값 또한 참(1)과 거짓(0)으로 내보냅니다.
기억하시나요? 지난 강의를 참조하시길 바랍니다.
13순위도 논리 연산자입니다.
14순위는 조건 연산자이며, 추후에 다루도록 하겠습니다.
15순위는 대입(할당) 연산자와 복합 할당 연산자입니다.
거의 마지막에 이루어지는 연산자입니다.
진짜 마지막 순위 16순위의 연산자는 쉼표 연산자입니다.
모든 연산자의 우선 순위를 살펴보았습니다.
앞으로 어떠한 예제의 수식을 보았을때에 연산자의 우선순위를 꼭 짚고 넘어가야합니다.
연산자의 우선순위를 잘못 이용하여 완전히 다른 결과값을 내보낼 수 있습니다.
그럼 마지막으로 예제를 한번 보겠습니다.
첫번째 수식, x=4-2*2&&6*4입니다.
어떠한 연산자들이 있나요?
천천히 앞에서부터 나열하면, =(대입 연산자), -(뺄셈), *(곱셈), &&(논리적 AND 연산자), *(곱셈)이 있습니다.
우선순위 확인해보겠습니다.
제일 먼저 해야하는 것은 곱셈입니다.
따라서 2*2와 6*4가 먼저 진행됩니다.
x=4-4&&24가 됩니다. 그리고 뺄셈이 다음 우선순위를 가집니다.
따라서 x=0&&24가 됩니다. 그리고 대입 연산자보다 논리적 AND 연산자가 우선순위를 가집니다.
따라서 0&&24가 진행되고, 이 결과값은 0(거짓)과 24(참)의 논리적 AND 연산자이기 때문에 결과값은 0(거짓)을 반환합니다.
따라서 x=0이 됩니다. 그리고 마지막으로 남은 대입 연산자가 변수 x에 0을 대입함으로써 수식이 끝납니다.
쉽죠?
두번째 수식과 세번째 수식은 괄호가 있습니다. 직접 풀어보실까요?
연산자의 우선순위를 가장 쉽게 이용하는 방법으로는 괄호를 잘 이용하시면 원하시는 방향으로 수식을 작성할 수 있습니다.
다음 강의에서 뵙겠습니다.
'Computer Science > C' 카테고리의 다른 글
Chapter 13. 정수 표현법 (0) | 2018.04.26 |
---|---|
Chapter 12. 진법 (0) | 2018.04.24 |
Chapter 10. 연산자 실습 (0) | 2018.04.18 |
Chapter 9. 연산자 (0) | 2018.04.13 |
Chapter 8. 변수의 자료형 (0) | 2018.04.12 |