2011년3월31일...연산자, 형변환, 연산우선순위와 속도, 반올림,마인드스톰

1.연산자

이 때까지 배운 연산자는 +와 –, =(대입), &(앰퍼센트?), sizeof (함수아님)

교과서 p.53 ‘→’포인트연산자는 ‘-‘와 ‘>’ 두 개의 문자이다. 화살표를 표시하는 키가 없다.

 

이 때까지 배운 괄호는 ( )               { }                 [ ]              < >

                            둥근괄호     중괄호           대괄호          삿갓, 꺽새괄호 (전처리, C문법아님)

 

단항연산자예 다항연산자예
sizeof( int )  1 + 4
-5 1 – 4

항이 하나                             항이 두개

똑같은 연산자가 다르게 사용됨.

 

 

p.53 표 2-9에서 위에 있는 연산자 우선순위가 높고 화살표 방향이 데이터의 방향,순서                                  

ex) int A = 3;                        1 + 4 + 5 + 6

         <-----                        --------------->  순서

 

 

2.산술연산자

5 / 3 = 1  (나머지는 2이나 버림)

5 % 3 = 2 (나머지를 구하는 연산자)

%는 형식지정자가 아닌 몫을 구하는 연산자

 

컴퓨터는 정수기반으로 가산기실습에서 보았듯이 1과 0 즉, 정수 중 양수만 계산한다.

 

int A = 4.3;

결과 A = 4  소수점이하 버림.

 

●20110331_Arithmetic

int iNum1 = 4.9;

int iNum2 = 4.1;    

모두 4가 저장된다.  어셈블리어를 보니 컴파일단계에서 소수점이하 잘라버린다.

 

 

3.형변환 (type cast)

일상생활에서 계산시,  8.3 ==  4 + 4.3   (==는 같다는 뜻)

                           (float)    (int)  (float)

                                       │     │

컴퓨터는,                       (float) + (float) 이렇게 모두 실수로 바꿔 실수 계산회로로 계산.

                                     형동등

 

○ 일반 컴퓨터는 정수가산기만 있으니 실수연산을 위해 co-processer가 필요하다.

    최근 CPU안에 co-processer가 내장되어 나오나 슈퍼컴퓨터에서는 외부에 있을 수도 있다.

○ 일상생활에선 멀티미디어 분야가 계산을 많이 한다.

 

int A = 4;
float B = 4.3;            //대입연산자도 형동등을 기준으로 함.
float C = A + B;        //C = 8.3, int C인 경우엔 8이 됨.
         (float) -> A를 float형으로 바꿔 계산.
float D = 7 / 3;         //모두 정수형이니 D는 2가 되고 2.00000

  

4.연산속도

 

덧셈이 제일 빠름. 뺄셈은 보수를 취하여 더하니 그 만큼 느림.
덧셈 > 뺄셈  >>> 곱셈,나눗셈
속도최적화가 여기서 일어난다(?)

 3 * 6 = 18 같은 계산식의 경우 곱셈을 하지 않고 덧셈으로 컴파일러가 바꿈.
3 + 3 + 3 + 3 + 3 + 3 = 18

5.반올림 (정리가 안 되어 있음)

Q.일상생활에서 반올림은 왜 하는가?

A. 손익, 기분
   지페만 취급하는 경우, 1300원짜리 물건을 1000원 내면 구매자는 300원 이익이나 판매자는 700원 손해.
                                                            2000원 내면 구매자는 700원 손해이나 판매자는 300원 손해.

 float A = 5 / 3.0;     -> A = 1.666667 (마지막자리 반올림)

정밀한 우주공학에선 반올림하는 자리를 늘려 오차를 줄임.

(구슬치기에서 가까운 거리에 있는 구슬을 칠 때와 먼 거리에 있는 구슬을 칠 때의 차이...구슬이 튕기는 작은 각도차이로 둘의 거리는 많이 달라진다.)

○정수계산 시 반올림하지 않고 자름. (int)
○실수계산 시 반올림함.                  (float) 

 

6.연산 우선순위

어릴 때 부터 곱셈과 나눗셈을 먼저하라고 배웠다. 교과서(임베디드 C) p.53 표2-9에서도 덧셈이나 뺄셈보다 곱셈과 나눗셈의 우선순위가 높다.

int A  = 3 + 4 / 7;
          --------> (결합방향)

'*' 는 에스테리스크(Asterisk)로 곱셈 연산자이다.

A  = (3 + 4) / 7;
      우선순위가 가장 높은 괄호가 있으므로 3과 4를 먼저 더한 후에 7을 나눔.
 

7.비교연산자

 5 < 6  O  1 참  True 
 5 > 6   X  0 거짓 False 

1과 0의 논리로 1과 0의 값을 가지고 출력하면 1과 0이 나옴.

int A = 5 > 6;    ->  A = 0
int B = 5 < 6;    ->  A = 1   //논리도 정수로 취급함. 회로가 정수를 취급하니...

5 > 6           5 >= 6           6 > 6            6 >= 6
(거짓)          (거짓)           (거짓)          (참)

p.55 표2-11에 '=' (대입연산자)는 항상 오른쪽


8.논리연산자

A and B (A와 B)  ->  A && B 
A와 B가 모두 참이어야 참.

참인 값: -1.1, 100, -99...(0이 아니면 참)
거짓인 값: 0

ex) !-100   ->  0 (참의 부정은 거짓)

왜? 0을 기준으로 하는가?
0이 아니면 무언가 있다. 

9.증감연산자 (20110331_incdec)

++iNum;
iNum++;  //모두 1을 더 함.

 

 

 

10.소스20110331_incdec 컴퓨터 구조 도식과 어셈블리어, 데이터의 이동등 순서대로 설명

 

(여기에 CPU와 RAM, GPU, 모니터, 키보드 연결 도식)

 

 

(C언어 코드와 어셈블리어, 설명)

 

 

 

 

 

 

 

 

 

 

 

보고서가 3일치는 밀린 것 같다.

이러다 월화수목금금금되는거 아닌가… OTL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11.마인드스톰 라인트레이서 마무리

 

(동영상) (소스)

 

 

 

12.마인드스톰 휴머노이드 Alpha Rex NXT as body까지

 

(직진을 못 하는 이유는?)

 

마인드스톰 설명은 주말에 OTL

 

 

 

 

(동영상)

(직진을 못 하는 이유는?)