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

예제. 2) ==================================================
#include <stdio.h>
int main(void)
{
int result;
int num1, num2;
{
int result;
int num1, num2;
printf("숫자 두개를 입력하세요 : ");
scanf("%d %d", &num1, &num2);
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 ...... 등등
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)
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
.....■ ■ ■ ■ ■ ■ ■ ■ ■
.....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)
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 a = 0xa7;
int b = 0x43;
int c = 032;
int d = 024;
int d = 024;
printf("16진수 0xa7 : %d \n", a); // 17
printf("16진수 0x43 : %d \n", b); // 7
printf("16진수 0x43 : %d \n", b); // 7
printf("8진수 032 : %d \n", c); //
printf("8진수 024 : %d \n", d);
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;
}
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) =>>> 이렇게 계산하면 오류이다
+ 10000001 (-1)
----------------
10000010 (-2) =>>> 이렇게 계산하면 오류이다
그럼 어떻게 할까?
※ 정확한 음의 정수 표현방식
1) 1의 보수를 취한다
> 11111110
> 11111110
2) 1을 더한다
> 11111111 ==>> -1의 2진형태
> 11111111 ==>> -1의 2진형태
00000001
+ 11111111
===========
100000000 === 앞에 1은 무시되고 결국 '0'이된다.
+ 11111111
===========
100000000 === 앞에 1은 무시되고 결국 '0'이된다.
☞ 2진수를 음수로 바꾸려면
그 수의 1의 보수로 취해주고, 1을 더한다.
그 수의 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 [ ]
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 [ ]
4) 1 1 1 1 0 0 0 0 [ ]
● 정수와 실수의 표현 방식
- 컴퓨터는 실수보다 정수를 빠르게 처리한다.
- 소수점이하의 작은 수가 생기면 한계를 지님
Ex) -5.4 ?
-5 + (-0,4) = -5.04
근데 0.0001은 어떻게 나타낼까?
Ex) -5.4 ?
-5 + (-0,4) = -5.04
근데 0.0001은 어떻게 나타낼까?
- 오차가 존재하는 단점을 지님
- ±(1.m)x2(e-127승) <--- 부도소수점 표현방식
- ±(1.m)x2(e-127승) <--- 부도소수점 표현방식

■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
↕ <---- m ------> <------ e ------->
부호
비트
0.0은 어떻게 표현할까?
===> 절대로 정확한 0.0에 가까운 값은 나타내지 못한다.
부동수소점 오차 >> 모든컴퓨터는 이런식으로 표현
===> 절대로 정확한 0.0에 가까운 값은 나타내지 못한다.
부동수소점 오차 >> 모든컴퓨터는 이런식으로 표현
ex) 예제

모든 프로그램밍 언어는 오차를 둘수 밖에 없다
= 컴퓨터가 바보이기때문에
= 컴퓨터가 바보이기때문에
'프로그래밍 > C' 카테고리의 다른 글
제 8장 여러형태의 반복문 (0) | 2010.07.08 |
---|---|
제 7장 비트단위 연산과 상수, 기본자료형 (0) | 2010.07.08 |
제 5장 변수와 연산자 - 2 (0) | 2010.07.08 |
제 4장 변수와 연산자 (0) | 2010.07.08 |
제 3장 C언어의 기초 - printf함수 (0) | 2010.07.08 |