2010. 7. 8. 18:38
준비물 : 필기도구, 연습장
 
 
 scanf 함수의 이해 <----> printf함수

 - 데이타를 입력받을때...
 
 - 10진수 정수형태를 입력해서 2번째 인자에 저장한다.
 
 - 배열, 포인터를 알아야 정확히 알수 있음.
 
 - 사용자가 직접 키보드를 이용해서 입력한 값을 변수에 대입을 하는것
 
 - scanf 함수를 이용한 정수의 입력
 
 - 변수의 주소값을 %d로 넘겨라
   > ex) 주소가 10번지면 %d는 10번지의 주소값이 들어간다
 
 
int main()
{
 int num;
 scanf("%d", &num) ;
 .....
 system("PAUSE");
 return 0;
}

                      
scanf("%d", &val);  //10진수 정수형으로 입력 받아서  변수 val에 저장하라
 
 

예제. 1) ======================================================



 
 
예제. 2) ==================================================
#include <stdio.h>
int main(void)
{
 int result;
 int num1, num2;
 printf("숫자 두개를 입력하세요 : ");
 scanf("%d %d", &num1, &num2);
 result = num1+num2;
 printf("%d + %d = %d \n", num1, num2, result);
 return 0;
}
=========================================================
 
scanf("%d %d %d \n", a, b);// 실행은 되지만 에러발생
                                                 // 메모리 참조 오류
 
 

● C언어의 키워드들
 
auto    _Bool   break case
char    int     do double
else    enum    float
while   void    sizeof
return  static  long ...... 등등
 
※ 키워드는 변수이름으로 사용불가하다!(예약된 언어다)
 
 
 

●  데이타 표현 방식의 이해
 
 - 컴퓨타가 데이타를 어떻게 표현을 할까?
 
 - 깊이 공부하기 위한 조건

진법에 대한 이해

 - n진수 표현 방식 : n개의 문자를 이용해서 데이타를 표현
   ex) 2, 8, 10 16진수

 - 컴퓨터는 내부적인 데이타 처리를 2진수로 처리
 
ex) 자리수 증가를 기준
 2 진수 : 0, 1
 8 진수 : 0 ~ 7
 10진수 : 0 ~ 9
 16진수 : 0 ~ 9, A ~ F 이용(a:10, b:11, c:12, ....f:15)
 
 

데이터의 표현 단위
 

1)bit(비트) : 데이타 표현의 최소단위, 2진수 값 하나
                 (0 또는 1)을 저장
 
2)byte(바이트) : 8bit == 1byte
 
이진수 ex)
.....128  64  32  16  8   4   2   1   0
 .....■  ■  ■  ■  ■  ■  ■  ■  ■
 
 

문제 3) ==========================================
 
 
 0 0 0 0 (0)
 0 0 0 1 (1)
 0 0 1 0 (2)
 0 1 0 0 (4)
 1 0 0 0 (8)

 
10진수 9를 2진수로 표현한다면?
 
10진수 43를 2진수로 표현한다면?
 
이진수 00010001 를 10진수 표현하면 얼마인가?

이진수 10011111 를 10진수 표현하면 얼마인가?
 
 
=====================================================
 
프로그램상의 8진수, 16진수 표현
 
 - 8진수 : 0으로 시작

 - 16진수 : 0x로 시작
 
int a = 10; // 10

int b = 0xa; // 16

int c = 012; // 10
 
 
 
예제. 3) ==================================================
 

 
#include <stdio.h>
 
int main()
{
 int a = 0xa7;
 int b = 0x43;
 int c = 032;
 int d = 024;
 printf("16진수 0xa7 : %d \n", a); // 17
 printf("16진수 0x43 : %d \n", b); // 7
 printf("8진수 032 : %d \n", c);  //
 printf("8진수 024 : %d \n", d);
 printf("a-b = %d \n", a-b);
 printf("c+b = %d \n", c+d);
 printf("b*c = %d \n", b*c);
 
 system("PAUSE");
 return 0;
}
// 컴퓨터의 모든 연산은 내부적으로 2진수로 한다.
 
 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
정수와 실수의 표현 방식
 
  정수의 표현방식

 - MSB : 가장 왼쪽 비트, 부호를 표현

 - MSB를 제외한 나머지 비트 : 데이터의 크기 표현
 
1byte : 8bit
 

   <---데이타크기--->
■  ■  ■  ■  ■  ■  ■  ■

부호
비트
표현(+,-) (양수면 0음수면 1)
 
 
  00000001 (+1)
+ 10000001 (-1)
----------------
  10000010 (-2)     =>>> 이렇게 계산하면 오류이다
 
 
그럼 어떻게 할까?
 
※ 정확한 음의 정수 표현방식
 
1) 1의 보수를 취한다
  > 11111110
 
2) 1을 더한다
  > 11111111   ==>> -1의 2진형태
 
 
  00000001
+ 11111111
===========
 100000000  === 앞에 1은 무시되고 결국 '0'이된다.
 
☞ 2진수를 음수로 바꾸려면
   그 수의 1의 보수로 취해주고, 1을 더한다.
 
EX) 이진수 바꿈형태
    
    13 ÷ 2 ....1
     6  ÷ 2 ....0
     3  ÷ 2 ....1
              ....1
 
거꾸로 읽는다 : 1101 (13)
 
 
연습문제 : 10진수로 얼마 인가?
 
1) 0 1 0 0 1 1 1 1  [   ]
2) 0 1 1 0 0 1 1 1  [   ]
3) 1 1 0 1 0 1 1 0  [   ]
4) 1 1 1 1 0 0 0 0  [   ]
 
 
             
정수와 실수의 표현 방식
 
 - 컴퓨터는 실수보다 정수를 빠르게 처리한다.
 
 - 소수점이하의 작은 수가 생기면 한계를 지님
 
  Ex) -5.4 ?
      -5 + (-0,4) = -5.04
 
      근데 0.0001은 어떻게 나타낼까?
  - 오차가 존재하는 단점을 지님
 
  - ±(1.m)x2(e-127승)  <--- 부도소수점 표현방식

  ■ ■ ■ ■ ■ ■ ■ ■      ■ ■ ■ ■ ■ ■ ■ ■
  ↕  <---- m ------>      <------ e ------->
 부호
 비트
 
 0.0은 어떻게 표현할까?
 ===> 절대로 정확한 0.0에 가까운 값은 나타내지 못한다.
        부동수소점 오차 >> 모든컴퓨터는 이런식으로 표현
     
ex) 예제
 
   오차가 발생했다 -> 이걸 염두를 꼭 하기
     모든 프로그램밍 언어는 오차를 둘수 밖에 없다
   = 컴퓨터가 바보이기때문에

Posted by 토실토실천재