3.14(수) Shift연산자

from Study/C언어 2007/03/14 23:32 view 26514
매번 느끼지만 이놈의 쉬프트 연산자는 감이 도통 잡히지 않는다. 왜냐.. 평소에 연산작업을

할 때 10진법을 주로 사용하므로 비트연산을 하는 이놈의 연산자는 친숙하지 않기 때문이다.

그래픽 쪽 프로그래밍 할때는 필수적(마스크나 반전,복원등)이라고 하나 해본적이 있어야지..

하지만 CPU입장에서 a*2를 한번 할 시간에 a<<1를 10번정도 할수 있다는 것은 큰 매리트가

아닐까 싶다.
 
 쉬프트 연산이 곱셈에 비해 불리한 점은 2의 거듭승에 대해서만 곱셈이 가능하다는 점이다.

2배,4배,8배,16배 등만 할 수 있으니 얼마나 불편한 일인가...

3배 : a << 1 + a;
9배 : a << 3 + a;
15배: a << 4 - a;
60배: a << 6 - a << 2;  //64배에서 4배를 제한 60배...와

속도가 중요하다면 이런 코드들도 욕심 부려 볼만 하지 않을까..

3.14(수) 이동효과 나타내기

from Study/C언어 2007/03/14 17:01 view 26845
for(i = 1; i <= 80; i++)
{
 gotoxy(i, 10);
 putch('#');
 gotoxy(i-1, 10);
 putch(' ');
 delay(100);
}


'#'을 왔다리 갔다리 하는 효과를 보여줄 때 출력,지움,시간끌기를 통하여 애니메이션 효과를

보여 줄 수 있다. 새위치에 그리고 이전 위치 지운 다음에 시간을 조금 끌어서 움직이고 있다

는 효과를 낼 수 있다.

3.14(수) 스캔코드와 아스키코드

from Study/C언어 2007/03/14 16:52 view 28038

 벌써부터 어깨가 뻐근한게 죽을 맛이다. 몸이 찌뿌둥 하다고 해야하나.. 앉아 있으면 시간이

물 흐르듯이 지나가서 하루가 이리 빨리 가나 싶다.

ch=getch();
  if (ch == 0xE0 || ch == 0) {
   ch=getch();
}
 getch()함수로 키보드로 입력되는 값을 ch 변수에 저장하고자 할때 아스키코드값 이외의

값을 받게 되면 0xE0(224)나 0 값을 리턴하게 되는데 이때 다시한번 getch()함수로 표준입력

을 변수에 대입시키게 되면 스캔코드를 얻을 수 있게 된다.

 콘솔창내에서 커서를 이동시키고자 할 때 방향키를 누르면 그때 발생되는 스캔코드를 읽어

드려서 커서의 위치를 변경할때 쓰인다.

 

getch 와 _getch

from Study/C언어 2007/03/14 09:12 view 29857

ANSI C에서 정의한 함수가 getch이고 VC++ 컴파일러 에서 지원하는 함수가 _getch이다.

굳이 표준 외에 함수를 만든 이유가 무엇일까 생각해봤는데

#include <conio.h>
#include <stdio.h>

void main( void )
{

   /* Display message until key is pressed. */
   while( !_kbhit() )
      _cputs( "Hit me!! " );

   /* Use _getch to throw key away. */
   printf( "\nKey struck was '%c'\n", _getch() );
   _getch();
}

만약에 이 소스에 getch라는 변수를 추가 했을때 getch()함수를 사용했다면

error C2064: term does not evaluate to a function

와 같은 에러를 볼 수 있다. 이를 방지 하기 위해서 '_'를 붙인 함수를 만든건 아닐까라는

생각이 든다. 그래서 변수명앞에 '_'를 사용하는 것을 금하는 거 아닐까-_-..