Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 5 C의 기초적인 값(primitive value)의 컴퓨터에서의 표현 문자, 정수, 실수, 참/거짓

Similar presentations


Presentation on theme: "Lecture 5 C의 기초적인 값(primitive value)의 컴퓨터에서의 표현 문자, 정수, 실수, 참/거짓"— Presentation transcript:

1 Lecture 5 C의 기초적인 값(primitive value)의 컴퓨터에서의 표현 문자, 정수, 실수, 참/거짓
디지탈 숫자의 한계

2 컴퓨터가 사용하는 메모리의 단위 bit byte = 8 bits word = 4 bytes = 32 bits
한계: 무한히 많이 표현할 수 없슴

3 C의 기초적인 값들을 위해 사용하는 메모리의 양
char short int long float double 1 byte 2 bytes 4 bytes 8 bytes

4 변수 선언때 그만한 메모리가 할당됨 변수의 타입으로 할당받고 싶은 메모리 크기를 지정한다:
char x; shor y; int z; long w; float a; double b; 타입의 또 다른 역할도 있슴을 명심: 내가 제 정신으로 프로그램하고 있는 지를 컴퓨터가 확인할 수 있도록 도와주는 코멘트 나 자신도 확인할 수 있도록 도와주는 코멘트

5 C는 그때그때 달라요 기본적인 값을 표현하는데 할당하는 메모리 양이 다를 수 있다.
사용하는 번역기(compiler)와 실행되는 컴퓨터에 따라. sizeof(int), sizeof(long), sizeof(float), sizeof(double) 등으로 확인해 보아야

6 sizeof함수로 확인가능 sizeof(<type>)
<type> 값을 표혀하기 위해 할당하는 메모리 크기를 byte 단위로 알려준다. #include <stdio.h> int main(void) { printf(“char: %d\n”, sizeof(char)); printf(“short: %d\n”, sizeof(short)); printf(“int: %d\n”, sizeof(int)); printf(“long: %d\n”, sizeof(long)); printf(“float: %d\n”, sizeof(float)); printf(“double: %d\n”, sizeof(double)); }

7 내 번역기와 컴퓨터에서의 결과 % gcc t.c % a.out char: 1 short: 2 int: 4 long: 4
float: 4 double: 8 %

8 char는 1 byte 할당 1 byte = 8 bits = 256가지를 표현 가능 영문 한글 자모 26개 x 2 + etc

9 정수 계열의 메모리 크기 int: 4 bytes short <= int <= long 4 bytes로 표시가능한 수
에서 까지 232개의 서로 다른 값을 표현할 수 있다.

10 signed v.s. unsigned int 타입의 변수가 가질 수 있는 정수 범위 unsigned int 의 경우
-231, , ..., -1, 0, 1, 2, ..., 231–1 -2,147,483,648  2,147,483,647 unsigned int 의 경우 0, 1, 2, 3, ..., 232 – 1 0  4,294,967,295

11 실수 계열의 메모리 크기 float, double 왜 “float”라고 했을까? 소수점이 떠다님 float: 4 bytes
double: 8 bytes 왜 “float”라고 했을까? 소수점이 떠다님

12 4 bytes = 1 bit for sign + fixed bits for 2 parts
부동 소수점 (float) 4 bytes = 1 bit for sign + fixed bits for 2 parts mantissa exponent 부동 소수점 표현 = 2부분 첫번째는 부호화된 고정 소수점 숫자:mantissa 두번째는 소수점의 위치를 알려주는 지수: exponent 예) 를 부동 소수점 표현으로 나타내면, mantissa exponent

13 수를 표현하는 한정된 메모리때문에 정확한 계산이 불가능 (1/5)
3가지 에러가 가능하다 error due to finite representation 유한개의 bit로 1/3를 정확히 표현 불가능 가능하기도 하고 (어떻게?) error due to arithematic op using “normalized” floating point numbers rounding error, round-off error = as 2.41 = as 2.42 error due to conversion from decimal to binary 32 bit computer stores 0.1 as

14 수를 표현하는 한정된 메모리때문에 정확한 계산이 불가능 (2/5)
#include <stdio.h> int main(void) { float x, y, z, r; x = e+38; y = x + 1.0e21; z = x – 1.0e21; r = y – z; printf(“%f\n”, r); } % gcc float-error.c % a.out

15 수를 표현하는 한정된 메모리때문에 정확한 계산이 불가능 (3/5)
#include <stdio.h> int main(void) { double x; float y, z, r; x = ; y = x + 1; z = x – 1; r = y – z; printf(“%f\n”, r); } % gcc double-error.c % a.out

16 수를 표현하는 한정된 메모리때문에 정확한 계산이 불가능 (4/5)
x x floats reals doubles 21 x 21 x-10 x+10 rouding error x x-1 x+1 rouding error

17 수를 표현하는 한정된 메모리때문에 정확한 계산이 불가능 (5/5)
#include <stdio.h> int main(void) { float x, y; x = 0.1; y = x – ; printf(“%f\n”, y); } % gcc conv-error.c % a.out

18 Lecture 6 C로 복잡한 구조의 값 표현하기 메모리 관리하기 복잡한 구조 프로그래밍 기술
array, struct, dynamic memory allocation 메모리 관리하기 malloc, free 복잡한 구조 프로그래밍 기술 value oriented v.s. object oriented


Download ppt "Lecture 5 C의 기초적인 값(primitive value)의 컴퓨터에서의 표현 문자, 정수, 실수, 참/거짓"

Similar presentations


Ads by Google