Presentation is loading. Please wait.

Presentation is loading. Please wait.

제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr.

Similar presentations


Presentation on theme: "제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr."— Presentation transcript:

1 제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr

2 타입이란? 메모리 공간을 정의 쓰임새 크기 정수형 char, int, short 부동소수점형 float, double 등등

3 쓰임새의 차이:int and float main(){ int i; i = 1; i = i + 1; } main(){
float i; i = 1; i = i + 1; }

4 Actual assembly code pushl %ebp movl %esp, %ebp subl $4, %esp
movl $0x3f800000, -4(%ebp) flds -4(%ebp) fld1 faddp %st, %st(1) fstps -4(%ebp) leave ret pushl %ebp movl %esp, %ebp subl $4, %esp movl $1, -4(%ebp) leal -4(%ebp), %eax incl (%eax) leave ret

5 다음 shcho.pe.kr

6 기본 데이터 타입 정수 계열: signed or unsigned 실수 계열: char short int int long int
float double long double

7 정수 계열 정수를 2진수 형태로 저장 문자의 저장에도 이용 char: 1byte, 문자에 주로 이용
short: 2byte, 크기가 작은 정수에 이용 long: 32 bit machine에서는 int와 같음 long long: 64bit int: 대개 4byte (16bit machine에서는 int=short)

8 주의 !!! char 는 character 타입이 아니라 짧은 정수형이다!!!!! char는 character에 많이 사용해서 그렇게 이름 붙인 것일 뿐 char, int, short, long 등은 길이만 다를 뿐, 모두 정수형임..

9 다음 shcho.pe.kr

10 Q18_01

11 수의 한계 1바이트(8bit)인 char의 경우: 2바이트인 short의 경우는? unsigned char는?
~ (0~127) ~ (-1~-128) 127 = 28-1, = -28 2바이트인 short의 경우는? unsigned char는?

12 “sizeof” 연산자 Not a function but an operator returns the size of a type or a variable in bytes e.g., sizeof(int)  sizeof(char)  1 int x; sizeof(x)  4

13 다음 shcho.pe.kr

14 실습 lab18_01/size.c sizeof() 함수를 이용하여 long long, long, int, short, char, long double, double, float의 길이를 출력하라. 예시: “int는 4바이트, char는 ....” File 명: size.c

15 정수간의 복제 int i; char c; c = 1; i = c; int i; char c; i = 15; c = i;

16 다음 shcho.pe.kr

17 실습 lab18_02/shortchar.c short s와 char c를 선언하고 s에 257을 assign한 후에 s를 c에 복사 다시 c를 s에 복사 s 와 c 값을 출력한다. File 명: shortchar.c

18 Bits view short char

19 다음 shcho.pe.kr

20 실습 lab18_03/types.c 변수 i는 int로, c는 char로 선언한다. i = c = 129; i와 c 값을 출력
File: types.c

21 Quiz18_02 결과 물어보기

22 도전 여러 개의 정수를 적어두어야 하는데 키보드에서 '-' 키가 고장 났다. 금액을 적는 칸에는 숫자밖에는 넣을 수가 없다. 어떻게 적으면 나중에 기억을 할 수 있을까? (실제 게임을 해보자 – 팀별로?)

23 부호 없이 음수 표현하기 3자리 10진수를 생각하자. +/- 부호 없이 음수를 만들려면? 방법 하나.
001 부터 499 까지는 정상적인 양수로 하고 500부터 999까지는 음수라고 하자. 양수인지 음수인지는 첫째자리만 보면 안다(0~4 양수 5~9 음수) 1000 – 999 = 1 이므로 999는 –1로 정하자 1000 – 998 = 2 이므로 998은 –2로 약속하자 ... 1000 – 500 = 500 이므로 이것은 –500으로 하자.

24 만일에 길동이가 실수로 999를 실제 구백구십구라고 생각하고 써놓았다면 약속을 알고 있는 다른 사람들은 이 수를 얼마로 해석할까?

25 Decimal game Use Web game

26 2진수의 음수 나타내기 4자리 2진수 -100 나타내기 – 0100 = – 100 = = = 1100 -1 나타내기

27 Binary 음수 만들기 game Web

28 Sign Extension = 127 의 보수 의 보수 == -127 == -127

29 unsigned 경우 unsigned char == 129 10000001 unsigned short == 129

30 다음 shcho.pe.kr

31 실습 lab18_04 18_03 에서의 types.c를 수정하여 unsigned int와 unsigned char로 선언한다.
i = c = 129; i와 c 값을 출력 c = i = 129; i와 c 값을 출력 File: utypes.c, 18_04.txt report_18_04.txt 에는 lab18_03의 결과와의 차이를 기술하고 차이에 대한 이유를 설명해보라.

32 실수와 정수간 자동 변환 정수  실수: 실수  정수 : Assignment 이외의 연산 int i; float f=1.5;
i = f;  truncation  1 실수  정수 : f=1; same as f = 1.0 Assignment 이외의 연산 5+2.5 9/5.0

33 다음 shcho.pe.kr

34 lab18_05/f_or_i.c #include <limits.h> // INT_MAX가 정의된 파일
i, j는 정수, f는 실수. 초기화 필요 while (i<INT_MAX){ i 값을 f에 넣었다가 f를 다시 j에 복사 만일 i와 j가 다르면 출력하고 프로그램 정지 i++; } 값이 달라지는 이유는 무엇이라고 생각되는가? 18_05.txt에 간략한 해답을 작성 goto 없이 끝내는 방법: return 0;

35 정수 상수의 타입 int i; ... i = 128; (129/5)+'a' + 1
long long int x = LL; 이 상수 자체는 int로 저장됨

36 lab18_06/ll.c/18_06.txt int x, y, z; x = y = 100; z = *y/x; printf("%d\n", z); z = LL*y/x; 위와 같은 코드를 실행하여 결과를 살펴보고 두 경우가 다르게 된 이유를 18_06.txt에 기술하여 제출하라.

37 실수 상수의 타입 double (8 byte)로 저장 0.8532 10.4 .3145 10.1e-15 -10.2e3

38 실수의 내부 표현 sign bit mantissa (유효 숫자): 2진수 exponent: 지수
*주의: 실제 비트열은 이와 다소 다름. 설명을 위하여 단순화하였음.

39 다음 shcho.pe.kr

40 실습 lab18_07: 실수의 한계 파일: f_limit.c float x = 1; while ( x 가 0보다 크다면 ) {
} x 값을 출력할 때는 %f와 %e 두 가지로 출력해본다.

41 실습 lab18_08: 실수의 한계 2 float 변수 두개를 선언한다. (x,y) x와 y에 1.0 값을 준다.
while을 이용하여 반복한다. 반복 조건은 "y 값과 y + x의 값이 다를 것"이다. 반복할 내용: x 값을 출력한다. x 값을 반으로 줄인다. while 문이 끝났다면 조건이 만족하지 않은 것이므로 x의 값을 출력한다. (%e format으로 출력) File 명: float.c 왜 x 값이 0이 아닌데도 불구하고 x + y가 y 값과 같은가?  18_08.txt

42 해설

43 Casting: 명시적 타입 변환 f = (9/5) * c + 32 ?? 
f = ((float)9 / (float)5) * c + 32 or f = (9.0/5.0) * c + 32 int sum, count; float average; average = sum / count; // incorrect average = sum / (float)count; average = (float)sum/(float)count;

44 다음 shcho.pe.kr

45 실습 lab18_09/avg.c scanf를 이용하여 정수를 data에 읽어 들여서 정수 변수인 sum에 계속 더해나간다. 읽은 데이터의 총 개수는 num에 저장한다. (더이상 데이터 입력이 없을 때까지) 평균은 총합을 데이터 개수로 나눈 것이다. 이것을 average라는 double 변수에 저장하라. 주의 할 것은 소수점 이하도 계산되도록 하는 것이다. avg.c

46 제 18 강 끝. shcho.pe.kr


Download ppt "제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr."

Similar presentations


Ads by Google