2016년 12월 25일 일요일

[C basic] day2

연산자의 종류
연산자의 종류도 다양한데, 우선적으로 사용할 것부터 알고 넘어갑니다.
증감연산자
기본적으로 사칙연산을 위한 연산자 + - * / 가 있고, 또 %가 있습니다. 전자는 누구나 다 알지만 %는 해깐해깐 할 건데요, %는 나눈 8%3 은 8을 3으로 나눈뒤 남은값인 2가 나오게 되는거죠.
그다음 특히 c는 반복하는것을 무진장 싫어한다고 합니다. 예를들어 8+1+1 따위 말이죠,
일반인도 싫기는 매 한가지겠지만..
이럴때 우리는 증가/감산 연산자를 이용합니다. ++ 나 -- 를 사용합니다. 8+1 을 8++ 나 ++8 따위로 적을수 있겠습니다, 연산자가 앞과 뒤에 붙는 차이는 계산의 순서입니다.
다 예상되겠지만 9번 줄은 좀 이상합니다.
분명 계산대로라면 5가 나와야 하지만 값은 4로 뜨더군요.
이유는 이러합니다. 컴퓨터는 단순하게 적힌순서대로 읽는것 이었습니다.
printf 응 먼저 읽은뒤, 출력하라는것을 인식합니다. 이후 따옴표 안의 %d 를 읽것이고, %d 형 그러니깐 10진수 형태로 출력을 한다 는 뜻임을 알게됩니다, 그럼 무엇을 읽는가? 에 대해서는 그 뒤의 콤마 뒤를 읽게 되는데요, a 가 앞에 있기때문에, 우리 성급하신 콤푸타님꼐서는 다짜고짜 a를 출력하는것입니다. 하지만 일단 문법상 오류가 없는 이상은 글을 끝까지 읽을것이며, 출력한 뒤에는 a 위의 ++ 를 읽게 됩니다. 그리고 뒤늦게 값을 바꾸게 되고, 우리는 출력은 4로 떠있지만 값은 5가 되어있는 사태를 마주하게 됩니다.
이를 확인 하기위해 10번 라인에 다시 printf("%d",a); 를 찍게되면 5가 나옴을 알수 있어요.
비교연산자
비교를 위한 연산자 입니다. < 와 >, ==와 != <= 와 >= 입니다.
일반적인 교육을 받은 우리들은 쉽게 알수 있습니다.
수학이랑 똑같거나 비슷한게 많네요!
>= 를 붙혀쓸 방법이 없기때문에 그대로 쓰는거에요. 근데 반대로는 =< 인가? 하실탠데, 그럼 =(대입한다)<(비교) 가 되기에 꼬여버리고 오유를 토해냅니다! 비교 연산자 먼저, 대입연산자 다음 입니다! <= 이나 >= 같이 말이죠!.
또 수학에서는 a=b 라고 쓰지만 콤퓨타는 이렇게 쓰면 a에 b를 넣는다! 가 되어버리기 때문에 는 이 두개 들어갑니다! a==b 이렇게 말이죠!
컴퓨터에서 Not 은 ! 이기때문에, 같지 않다는 != 로 쓰여요.
간단하지만 잘 쓰이더군요.
또 하다보니 알게 된건데, a+b=c; 이런방식도 수학에서 쓰였지만, 이러면 컴퓨터가 멘붕을 합디다.
대입할 대상을 항상 좌측에다가 쓰는게 오류를 안보는 가장 간단한 방법이더군요!
c=a+b; 처럼 말이죠!

논리연산자
쉽습니다! 몇개 없기도 하구요!.
논리 연산자는 AND OR NOT 이 있으며, 이 새개를 응용해서 몇가지 더 있습니다만, 기초는 이것들 뿐이네요!.
A AND B = A와 B
A OR B = A혹은 B
NOT A = A가 아님
뜻은 이렇구요,

AND 는 && 로 씁니다.
OR은 || 로 쓰며,
NOT은 바로 위에 언급되었지만 ! 입니다.

위 조건들이 맞으면 값은 1이 나오고, 아닐경우 0 이 나옵니다.
여기서 조금 거시기 한게, C 에서는 맞을때의 값이 항상 1이 아닙니다. 틀릴떄는 항상 0인반면, 그 이외의 값은 다 true가 됩니다.
C 이후 프로그래밍 언어에서는 통일되어 true 는 false 는 0 으로 바뀌었다고 합니다.
하지만 C는 그지같으니. C를 배울떄 만큼은 유념해 둬야 할 상황 같습니다.



요놈을 보면 우리가 입력하는 num1 과 num2 로 비교를 해본 녀석입니다.
예를 들어 두 값을 순서대로 1 ,20 을 써봅니다.
8번 라인을 해석해보면 num4는 1<20 이고 1<10 이다.
논리적으로 다 맞는 말 이기때문에, 값은 1이 나옵니다!

10번 라인을 보도록 하죠! 
num4는 1<20 이거나 1 < 10 이다.
역시 맞네요! 답은 1이 나옵니다!.

만약 값을 9와 1로 쓴다면?
8번 라인은 num4는 9<1 이고 9<10 이다. 뒤에껀 맞는데 앞은 틀렸네요, AND 연산자 이기때문에, 두개다 맞아야 합니다. 이런 경우는 num4=0 이 됩니다!.
10번 라인은 num4는 9<1 이거나 9<10 이다.
OR 비교 연산자 이기때문에, 전자는 틀렸어도 후자는 맞기 때문에 1이 나옵니다!

쉽죠?
마치기전에 예외사항이 있습니다.
컴퓨터는 코드를 순서대로 읽는다고 말 했었습니다. 그렇기 때문에 OR 연산자에서, 첫번째 비교 값이 True 일 경우 후자를 아예 읽지 않는 사태가 발생합니다.
언제 이런걸 쓸지는 모르겠다만, OR 의 후자에서 값이 변하는 경우에는 이게 문제를 유발할 수 있다는것을 유의해야 할거 같습니다.

day5까지 진도가 나갔지만, 도저히 이걸 쓰고있을 시간이 없기때문에 걱정입니다. 미칠듯한 과제폭풍..

댓글 없음:

댓글 쓰기