안녕하세요, 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


안녕하세요, C 프로그래밍 언어 열번째 강의입니다.

오늘은 Chapter 9에서 배운 연산자를 실습하겠습니다.

이번 시간만큼은 직접 코드를 작성하고, 컴파일 해보시길 바랍니다. 반드시!



일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.


가장 먼저 Chapter 7에서 배운 변수 선언을 대입 연산자를 이용해 변수 초기화와 동시에 했습니다.

변수 x에는 7이 대입되었고, 변수 y에는 4가 대입되었습니다.


그리고 Chapter 6에서 배운 printf 함수입니다. 잠깐 복습 겸 우리가 작성한 첫번째 printf 함수를 살펴볼까요.

첫 번째 전달인자는 겹따옴표 ""안의 내용입니다. 이 전달인자는 실제 화면에 출력하고자 하는 내용입니다.

그 중 %d은 서식 지정자이며, ""안에서 첫번째로 나타난 서식 지정자 %d는 printf 함수의 두 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

그리고 ""안에서 두번째로 나타난 서식 지정자 %d는 printf 함수의 세 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

마찬가지로 ""안에서 마지막으로 나타난 서식 지정자 %d는 printf 함수의 네 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

그리고 ""안에서 /n은 줄바꿈을 의미합니다. 이에 대해서는 추후에 다시 언급하겠습니다.

지금은 ""안에 \n을 넣는다면 줄바꿈이 된다고 이해하시면 충분합니다.


일단 슬라이드의 코드를 직접 작성하고 컴파일 (ctrl+F5)를 해볼까요.



컴파일 결과가 출력되었습니다.

첫번째 printf 함수는 덧셈 연산자입니다. 마지막 전달인자에서 x+y가 계산이 되고, 세번째 서식 지정자 위치에서 해당 값이 출력이 되었습니다.

7+4=11이 정상적으로 출력되었습니다.

뺄셈, 곱셈 연산자도 정상적으로 출력되었습니다.

하지만 네번째 printf 함수에서는 무엇이 출력이 되었나요?

실제 7/4는 1.75입니다. 하지만 모종의 이유로 소수점 이하는 생략된채 1만 출력이 되었습니다.

이는 변수의 자료형, 서식 지정자와 연관이 있으며, 조만간 설명해드리겠습니다.

마지막 연산자는 나머지 연산자입니다.

나머지 연산자는 말 그대로 나눗셈을 하고 나머지를 계산하여 출력합니다.

7/4를 계산하였을 때, 7=4*1+3, 즉 몫은 1이며 나머지는 3으로 계산할 수 있습니다.

따라서 3을 정상 출력하였습니다.


이때, 코드를 다시한번 보실까요? 마지막 printf 함수에 "%d%%%d=%d\n"라고 작성하였습니다.

%가 과도하게 많죠? printf 함수의 ""안에서 %를 마주치면 뭔가 특별한 것이 있을 것이라고 컴파일러는 판단합니다.

이로인해 %d가 문자 그대로의 %d가 아닌 서식 지정자로 인식이 됩니다.

하지만 문자 그대로의 %를 입력하고 싶다면, %%을 작성하시면 실제 출력화면에서는 %만 출력됩니다.

이러한 과정도 추후에 다시 설명하겠습니다. 지금은 연산자 실습시간이죠.



일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



후위 증감 연산자와 전위 증감 연산자는 주의깊게 사용해야합니다.


후위 증가 연산자의 경우, 모든 계산이 끝나고 다음 줄로 넘어갈 때 계산이 이루어집니다.

예를 들어, 현재 x=7이라고 변수 선언과 동시에 초기화를 하였습니다.

이를 후위 증가 연산자를 이용해, printf("%d\n", x++);라고 작성하였습니다.

이 때, x는 증가하지 않은채 수식이 진행됩니다. x는 그대로 숫자 7인 채로 진행됩니다.

따라서 printf 함수가 끝날 때까지도 x는 7이며 실제 컴파일 화면에서도 7을 출력합니다.

하지만 printf 함수가 끝나고 다음 줄로 넘어갈때 후위 증가 연산자는 작동합니다.

이 순간에 후위 증가 연산자가 x를 1 증가시켜 x=7+1=8로 만듭니다.

그렇기때문에 두번째 printf("%d\n", x)에서 x는 8이 되어 있었고, 실제 컴파일 화면에서도 8이 출력됩니다.


하지만 전위 증가 연산자의 경우는 다릅니다.

전위 증가 연산자의 경우 후위 증가 연산자와 달리 가장 우선적으로 변수를 1 증가시킵니다.

따라서 세번째 printf 함수에서 x는 8이였지만, 전위 증가 연산자로 인하여 곧바로 x=8+1=9가 되었고, 컴파일 화면에서 9가 출력됩니다.

그리고 이미 연산이 끝났기 때문에 세번째 printf 함수가 끝나도 변수 x는 변동이 없습니다.


이와 마찬가지로 후위, 전위 감소 연산자도 진행됩니다.

작성한 코드와 컴파일 화면을 잘 비교하며 공부해보세요.




비교 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



지난 시간에도 말씀드렸이 비교 연산자의 결과값은 참(1) 혹은 거짓(0)입니다.

x=7이고 y=4입니다.

첫번째 수식 7==4(7과 4는 같다)라는 수식은 거짓입니다. 따라서 거짓(0)을 반환하고 실제 컴파일 화면도 0을 출력합니다.

두번째 수식 7!=4(7과 4는 다르다)라는 수식은 참입니다. 따라서 참(1)을 반환합니다.

세번째 수식 7>4(7은 4보다 크다)라는 수식은 참입니다. 따라서 참(1)을 반환합니다.

네번째 수식 7<4(7은 4보다 작다)라는 수식은 거짓입니다. 따라서 거짓(0)을 반환합니다.



논리 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



x = 1, 즉 논리 연산자 입장에서는 참을 뜻합니다.

y = 0, 즉 논리 연산자 입장에서는 거짓을 뜻합니다.

첫번째 수식 !x(x의 반대)는 참의 반대인 거짓(0)입니다.

두번째 수식 x&&y(x와 y 모두 참이다)는 y가 거짓이기 때문에, 거짓(0)입니다.

세번째 수식 x||y(x 혹은 y 중 최소 하나는 참이다)는 x가 참이기 때문에, 참(1)입니다. 



복합 할당 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



복합 할당 연산자는 대입 연산자와 다른 연산자가 합쳐진 연산자입니다.

지난  시간에 설명했듯이 연산과 동시에 대입을 합니다.

첫번째 printf 함수를 보면 가장 초기 x값을 출력합니다. 숫자 7입니다.

덧셈 할당 연산자를 실행합니다.

x += y를 풀어 설명하자면, x와 y를 더하고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 7이고 y는 4이기때문에 7+4=11이 다시 x에 대입되어 x=11이 됩니다.

그렇기에 두번째 printf 함수의 변수 x 출력값이 11이 됩니다.


마찬가지로 x -= y를 풀어 설명하자면, x와 y를 빼고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 현재 11이고 y는 4이기때문에 11-4=7이 다시 x에 대입되어 x=7이 됩니다.

그렇기에 세번째 printf 함수의 변수 x 출력값이 7이 됩니다.



다시 x *= y를 풀어 설명하자면, x와 y를 곱하고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 현재 7이고 y는 4이기때문에 7*4=28이 다시 x에 대입되어 x=28이 됩니다.

그렇기에 세번째 printf 함수의 변수 x 출력값이 28이 됩니다.


이런 식으로 /=와 %= 를 유추할 수 있습니다.


오늘 실습은 여기까지 마무리 짓겠습니다.
반드시 직접 손으로 코드를 작성해보고 컴파일 해보시는 시간을 가지시길 바랍니다.


'Computer Science > C' 카테고리의 다른 글

Chapter 12. 진법  (0) 2018.04.24
Chapter 11. 연산자 우선순위  (0) 2018.04.19
Chapter 9. 연산자  (0) 2018.04.13
Chapter 8. 변수의 자료형  (0) 2018.04.12
Chapter 7. 변수의 선언  (0) 2018.04.12


안녕하세요, C 프로그래밍 언어 아홉번재 강의입니다.

오늘은 연산자에 대해 간단히 알아보겠습니다.

지난 시간은 변수의 선언에 대해 알아봤습니다.

그 과정에서 대입 연산자라는 것이 쓰였는데, 그 자세한 내용입니다.



연산자는 크게 '산술 연산자', '비교 연산자', '논리 연산자', '비트 연산자', '복합 할당 연산자', '멤버와 포인터 연산자', 그리고 기타로 나눌수 있습니다.

여기서 멤버와 포인터 연산자는 추후 포인터 강의때 설명하도록 하겠습니다.

마찬가지로 아직은 쓰일 일이 없는 비트 연산자도 추후에 다루도록 하겠습니다.



산술 연산자는 매우 기초적인 계산을 담당하고 있습니다.

지난 시간에도 배웠던 대입 연산자란 b를 a에 대입(치환)한다는 의미입니다.

덧셈 연산자란 a와 b를 더하는 연산자,

뺄셈 연산자란 a에서 b를 빼는 연산자,

곱셈 연산자란 a와 b를 곱하는 연산자입니다.



나눗셈 연산자란 a를 b로 나누는 연산자,

나머지 연산자란 a를 b로 나누고 그 나머지 값을 구하는 연산자입니다.


그리고 가장 중요한 증가 연산자와 감소 연산자가 있습니다.

증가 연산자는 다시 두가지로 나뉘는데, 전위 증가 연산자후위 증가 연산자가 있습니다.

두 연산자 모두 a에 더하기 1을 하겠다는 의미이지만,

앞에 위치한 전위 증가 연산자는 다른 수식과 함께 쓰일 경우 가장 우선순위로 a에 1을 더합니다.

하지만 뒤에 위치한 후위 증가 연산자는 다른 수식과 함께 쓰일 경우 모든 연산자가 끝나고 마지막에 a에 1을 더합니다.


감소 연산자 또한 증가 연산자와 마찬가지로 전위와 후위로 나뉘며, 용도는 같습니다.


전위와 후위에 대해 헷갈리시나요? 다음 강의에서 실습을 통해 다시 알아보겠습니다.



비교 연산자는 수식의 조건이 만족하면 숫자 1을 반환합니다.

만약 수식의 조건이 만족되지 않으면 숫자 0을 반환합니다.

같음 비교 연산자를 이용하여 예를 들어보겠습니다.

컴퓨터는 5==6 이라는 수식을 만나게 된다면 ==을 기준으로 양쪽의 두 식을 비교하는 비교 연산자임을 알게 됩니다.

실제로 두 식을 비교하여 ==이 맞는지 틀린지 확인을 합니다.

위 예제 5==6는 당연히 틀린 수식임으로 컴퓨터는 숫자 0을 반환합니다.

반대로 6==4+2와 같이 수식이 맞다면 컴퓨터는 숫자 1을 반환합니다.

같지 않음 비교 연산자를 살펴보겠습니다.

5!=4는 무엇을 반환할까요?

한국어로 천천히 해석해본다면, '5와 4는 같지 않다'라는 말과 같습니다. 즉 올바른 수식이며 숫자 1을 반환합니다.



비교 연산자는 어렵지 않겠습니다.

수식이 만족하면 숫자 1을 반환하고, 수식이 만족하지 않으면 숫자 0을 반환한다는 점을 유의해주세요.



비교 연산자와 비슷한 논리 연산자입니다.

논리 연산자를 설명하기 이전에 프로그래밍의 참(True)와 거짓(False)에 대해 설명하겠습니다.

앞서 배운 비교 연산자를 생각해볼까요.

5==3은 참일까요 거짓일까요?

네, 이 수식은 거짓(False)입니다. 그렇다면 컴퓨터는 어떤 값을 반환했을까요?

위에서 설명해드렸듯이 컴퓨터는 0을 반환합니다.

프로그래밍에서 거짓(False)은 숫자 0으로 표현을 합니다.

그렇다면 참(True)은 숫자 1로 표현하는 것일까요?

절반은 맞고 절반은 틀립니다.

프로그래밍에서 참(True), 거짓(False)을 이야기할 때, 숫자 0은 거짓을 뜻합니다.

그리고 그 나머지 모든 숫자는 참을 뜻합니다. 그 중 가장 대표적인 숫자가 1입니다.


이해 가셨나요?


그럼 논리 연산자로 돌아오겠습니다.

논리 연산자는 숫자를 참과 거짓 정보로 생각하셔야합니다.

논리적 NOT 연산자는 a가 거짓일 경우, 참을 반환합니다.

만약 a가 참일 경우, 거짓을 반환합니다.


논리적 AND 연산자는 a와 b가 모두 참이여야만, 참을 반환합니다.

그 외의 모든 경우는 거짓을 반환합니다.


논리적 OR 연산자는 a와 b 중 하나만 참이여도, 참을 반환합니다.

하지만 그 외의 모든 경우는 거짓을 반환합니다. 




비트 연산자에 대해서는 추후에 다루도록 하겠습니다.



비트 연산자에 대해서는 추후에 다루도록 하겠습니다.



복합 할당 연산자는 대입연산자와 나머지 연산자들이 합쳐진 연산자입니다.

쉽게 생각하여 연산과 동시에 대입을 할 수 있습니다.

덧셈 할당 연산자는 a에 b를 더한 값, a+b를 즉시 a에 대입하겠다는 표현입니다.

뺄셈 할당 연산자는 a에서 b를 뺀 값, a-b를 즉시 a에 대입하겠다는 표현입니다.


나머지도 같은 방식으로 진행됩니다.



나머지도 같은 방식으로 진행됩니다.


좀더 구체적인 설명과 예시는 바로 다음시간에 이어서 하겠습니다.





'Computer Science > C' 카테고리의 다른 글

Chapter 11. 연산자 우선순위  (0) 2018.04.19
Chapter 10. 연산자 실습  (0) 2018.04.18
Chapter 8. 변수의 자료형  (0) 2018.04.12
Chapter 7. 변수의 선언  (0) 2018.04.12
Chapter 6_1. 과제  (0) 2018.04.05

+ Recent posts