ABC 3장

Similar documents
Microsoft PowerPoint - chap03-변수와데이터형.pptx

ABC 3장

Microsoft PowerPoint - chap03.ppt

OCW_C언어 기초

Microsoft PowerPoint - Chapter_04.pptx

PowerPoint Presentation

OCW_C언어 기초

Microsoft PowerPoint - chap04-연산자.pptx

슬라이드 1

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 2장 변수와 자료형 pptx

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습

untitled

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - chap-04.pptx

Microsoft PowerPoint - chap-04.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

11장 포인터

untitled

Microsoft PowerPoint - ch07 - 포인터 pm0415

ABC 2장

쉽게 풀어쓴 C 프로그래밍

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

untitled

Microsoft PowerPoint - chap06-2pointer.ppt

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

본 강의에 들어가기 전

슬라이드 1

Microsoft PowerPoint - [2009] 02.pptx

4.0 개요 p.116 수식 (expression) 연산자 (operator) 와피연산자 (operand) 로구성 수식은평가 (evaluate) 되어최종적으로 1 개의결과값이됨 피연산자 : 상수, 변수, 또다른수식 sum - 10 (a+b) / 2 연산자 2

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

<4D F736F F F696E74202D20C1A634C0E520BAAFBCF6BFCDC0DAB7E1C7FC>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C++ 5 .pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap-05.pptx

Microsoft PowerPoint - 제11장 포인터

PowerPoint Presentation

금오공대 컴퓨터공학전공 강의자료

C 프로그래밊 개요

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

<4D F736F F F696E74202D20C1A635C0E520BCF6BDC4B0FABFACBBEAC0DA>

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - chap-11.pptx

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - 제11장 포인터(강의)

PowerPoint 프레젠테이션

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - c2.ppt

윤성우의 열혈 TCP/IP 소켓 프로그래밊

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap05-제어문.pptx

쉽게 풀어쓴 C 프로그래밍

1.1.1 컴퓨터의 구성 p.19

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

쉽게 풀어쓴 C 프로그래밍

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - additional01.ppt [호환 모드]

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

중간고사

K&R2 Reference Manual 번역본

슬라이드 1

OCW_C언어 기초

Microsoft PowerPoint - ch01.ppt

PowerPoint 프레젠테이션

슬라이드 1

2 장수의체계 1. 10진수 2. 2진수 3. 8진수와 16진수 4. 진법변환 5. 2진정수연산과보수 6. 2진부동소수점수의표현 한국기술교육대학교전기전자통신공학부전자전공 1

버퍼오버플로우-왕기초편 3.c언어에서버퍼사용하기 버퍼는 임시기억공간 이라는포괄적인개념이기때문에여러곳에존재할수있습니다. 즉, CPU 에도버퍼가존재할수있으며, 하드디스크에도존재할수있고, CD- ROM 이나프린터에도존재할수있습니다. 그리고앞의예제에서보신바와같이일반프로그램에도

Microsoft PowerPoint - chap-06.pptx

컴파일러

Microsoft PowerPoint - chap12-고급기능.pptx

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

KNK_C02_form_IO_kor

PowerPoint 프레젠테이션

02장.배열과 클래스

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

03 상수, 변수, 자료형

PowerPoint 프레젠테이션


PowerPoint Presentation

<4D F736F F F696E74202D2032C1D6C2F72D32C2F7BDC32028B0ADC0C7C0DAB7E D20BAAFBCF6BFCD20BFACBBEAC0DA>

Microsoft PowerPoint - chap-03.pptx

C++ Programming

Transcription:

4 장기본자료형 김명호

자료형 선언문 수식과문장 정수 문자 논리값 실수 Sizeof 복소수 일반적산술변환과캐스트 내용 1

자료형 C 프로그램의모든변수는자료형이명시되어야함 자료형 (Data type) 또는형 (Type) - 기본자료형 - 사용자자료형 메모리에는모든값들이 0 또는 1 의비트열로저장되지만자료형에따라표현방법이다름 2

프로그램 4.1 예제프로그램 #include <stdio.h> int main(void){ int i; i = 65; printf(" 정수? : %d\n", i); printf(" 실수? : %f\n", i); printf(" 문자? : %c\n", i); return 0; } 3

프로그램결과 정수? : 65 실수? : 0.000000 문자? : A 4

기본자료형 _Bool char signed char unsigned char signed short int signed int signed long int signed long long int unsigned short int unsigned int unsigned long int unsigned long long int float double long double float _Complex double _Complex long double _Complex float _Imaginary double _Imaginary long double _Imaginary * 빨간색은 C99 에서추가된형 5

기본자료형 ( 축약형 ) _Bool char signed char unsigned char short int long long long unsigned short unsigned unsigned long unsigned long long float double long double float _Complex _Complex long double _Complex float _Imaginary _Imaginary long double _Imaginary 6

기본자료형 ( 기능분류 ) 정수형 _Bool char short unsigned short signed char int unsigned unsigned char long unsigned long long long unsigned long long 부동형 float float _Complex float _Imaginary double _Complex _Imaginary long double long double _Complex long double _Imaginary 산술형정수형 + 부동형 7

선언문 모든변수는사용되기전에반드시선언되어야함 선언문자료형식별자 ; 자료형식별자 _ 목록 ; // 각식별자는콤마 (,) 로분리됨 선언문예 int i; float x, y; i x y 8

선언문 배정연산자를사용하여값을저장할수있음 i = 2 * 5; // 실행문 x = 5.0; i x y 10 5.0 y = i * x; i x y 10 5.0 50.0 9

예제프로그램 프로그램 4.2 #include <stdio.h> int main(void){ int num1, num2, num3, multiply; float fnum1, fnum2, fmultiply; } printf(" 두정수를입력하세요 : "); scanf("%d%d", &num1, &num2); multiply = num1 * num2; fnum1 = num1; fnum2 = num2; fmultiply = fnum1 * fnum2; printf("%d * %d = %d \n", num1, num2, multiply); printf("%.2f * %.2f = %.2f\n", fnum1, fnum2, fmultiply); return 0; 10

프로그램결과 두정수를입력하세요 : 4 3 4 * 3 = 12 4.00 * 3.00 = 12.00 11

선언문 선언한변수를사용하지않아도됨 C90에서는실행문앞에선언문이있어야함 C99에서는실행문과선언문이혼합될수있음 - 변수가사용되기전에만선언되면됨 12

예제프로그램 프로그램 4.3 #include <stdio.h> int main(void){ int num1, num2; printf(" 두정수를입력하세요 : "); scanf("%d%d", &num1, &num2); int multiply; multiply = num1 * num2; printf("%d * %d = %d \n", num1, num2, multiply); float fnum1, fnum2; fnum1 = num1; fnum2 = num2; float fmultiply; fmultiply = fnum1 * fnum2; printf("%.2f * %.2f = %.2f\n", fnum1, fnum2, fmultiply); return 0; } 13

변수선언의목적 변수의메모리공간확보 int num1, num2; // 각각 4 바이트할당 올바른연산자선택 multiply = num1 * num2; // 정수 * fmultiply = fnum1 * fnum2; // 실수 * 컴파일러에게정보전 fnum1 = num1; // 정수값을실수로변환하여저장 14

수식과문장 수식 - 상수, 변수, 함수호출그자체 - 수식과연산자의의미있는결합 - 대부분의수식은값과형을가짐 예 - 30 - 'c' - a - a + b - c = a + b - 5.0 * x - tan(9.0 / x) 15

문장 수식과문장 - 수식뒤에세미콜론이오면, 수식은문장이됨 예 - 3.777; - a + b; - c = a + b; 16

정수 정수 부호있는 2의보수로표현 첫번째비트 : 부호비트 (1 : 음수, 0 : 양수 ) 나머지비트 : 2의보수 2의보수 양수 : 2진수 음수 : 절대값의 2진수의 1의보수 + 1 1의보수 : 각비트를토글하는것 (1->0, 0->1) 3-17

정수 정수의표현 0 1 2... 31 부호 수의 2 의보수 3-18

정수 341 부호 : 0 341의 2진수 0000000 00000000 00000001 01010101 비트열 0 0000000 00000000 00000001 01010101 00000000 00000000 00000001 01010101 3-19

-341 부호 : 1-341의절대값 2진수 정수 0000000 00000000 00000001 01010101 1 의보수 1111111 11111111 11111110 10101010 1 의보수 + 1 1111111 11111111 11111110 10101011 비트열 1 1111111 11111111 11111110 10101011 11111111 11111111 11111110 10101011 3-20

69 연습 (8 비트 ) -69 3-21

69 0100 0101-69 연습 (8 비트 ) 3-22

69 0100 0101-69 1011 1011 연습 (8 비트 ) 3-23

int는정수기본형 int 부류자료형 - 크기에따른분류 int 부류자료형 - 2 바이트 : short, int( 구형 ) - 4 바이트 : int, long - 8 바이트 : long long * 모든정수를표현할수없음 - 부호에따른분류 - 음수표현가능 : signed - 음수표현불가능 : unsigned 24

int 부류자료형 short 자료형은기억장소를절약하고자하는경우에사용 long 과 long long 형은큰정수값을다룰때사용 unsigned 형의변수는음수가아닌정수를표현할때사용함 <limits.h> 헤더파일에크기정의 25

int 자료형 값의범위 - 4 바이트워드컴퓨터 - 최소 = -2 31 = -2,147,483,648 - 최대 = +2 31-1 = +2,147,483,647-2 바이트워드컴퓨터 ( 구형컴퓨터 ) - 최소 = -2 15 = -32,768 - 최대 = +2 15-1 = +32,767 26

프로그램 4.4 #include <stdio.h> 예제프로그램 #include <limits.h> int main(void) { printf("int 최소값 : %d\n", INT_MIN); printf("int 최대값 : %d\n", INT_MAX); return 0; } 27

프로그램결과 // 4 바이트컴퓨터 int 최소값 : -2147483648 int 최대값 : 2147483647 // 2 바이트컴퓨터 int 최소값 : -32768 int 최대값 : 32767 28

int 부류자료형 정수를다룰때 int 가기본형이지만, 필요에따라다양하게선택할수있음 자료형 크기 ( 바이트 ) short 2 int 4 long 4 long long 8 범위 -2 15 ~ 2 15-1 ( 약 ±3 만 ) -2 31 ~ 2 31-1 ( 약 ±21 억 ) -2 31 ~ 2 31-1 ( 약 ±21 억 ) -2 63 ~ 2 63-1 ( 약 ±922 경 ) 변환명세 %hd, %hi, %hx, %ho %d, %i, %x, %o %ld, %li, %lx, %lo %lld, %lli, %llx, %llo 29

unsigned 형 int 부류자료형 자료형 크기 ( 바이트 ) unsigned short 2 unsigned int 4 unsigned long 4 unsigned long long 8 범위 0 ~ 2 16-1 ( 약 6 만 ) 0 ~ 2 32-1 ( 약 42 억 ) 0 ~ 2 32-1 ( 약 42 억 ) 0 ~ 2 64-1 ( 약 1844 경 ) 변환명세 %hu, %hx, %ho %u, %x, %o %lu, %lx, %lo %llu, %llx, %llo 30

int 부류자료형 정수상수에그형을명시하기위해서는접미사를붙일수있음 접미사가붙지않은정수상수의형은 int, long long, unsigned long long 중하나임 - 시스템은세가지형중그정수상수를표현할수있는첫번째것을선택하여그정수상수의형으로함 - 예를들어, 4 바이트워드컴퓨터에서상수 2147483647 은 int 형이고, 2147483648 은 long long 형임 31

정수형접미사 접미사자료형예제 u 또는 U l 또는 L ul 또는 UL ll 또는 LL unsigned unsigned long unsigned long long long long long unsigned long unsigned long long long long ull 또는 ULL unsigned long long 1024U 0xffffU 1024L 0xffffL 1024UL 0xffffUL 1024LL 0xffffLL 1024ULL 0xffffULL 32

프로그램 4.5 #include <stdio.h> int main(void) { } int 부류자료형 long long v1, v2, v3; v1 = v2 = 9000000000000000000LL; // 900 경 v3 = v1 + v2; // 900 경 + 900 경 = 1800경? printf("%lld + %lld = %lld\n", v1, v2, v3); return 0; 33

프로그램결과 9000000000000000000 + 9000000000000000000 = -446744073709551616 34

정수오버플로 int 부류자료형 - 값의범위를초과할때발생 ( 주의필요 ) - 정수오버플로가발생해도프로그램은계속수행되지만, 논리적으로부정확한값이계산됨 35

문자 문자도컴퓨터에저장될때에는 0과 1의비트열로저장됨 문자를비트열로의변환은표준이있음 - ASCII - EBCDIC 36

ASCII 코드 0 1 2 3 4 5 6 7 8 9 0 nul soh stx etx eot enq ack bel bs ht 1 nl vt np cr so si dle dc1 dc2 dc3 2 dc4 nak syn etb can em sub esc fs gs 3 rs us sp! " # $ % & ' 4 ( ) * +, -. / 0 1 5 2 3 4 5 6 7 8 9 : ; 6 < = >? @ A B C D E 7 F G H I J K L M N O 8 P Q R S T U V W X Y 9 Z [ \ ] ^ _ ' a b c 10 d e f g h i j k l m 11 n o p q r s t u v w 12 x y z { } ~ del 37

ASCII 코드 ASCII 코드에서문자상수와대응되는정수값 문자상수대응하는값 'a' 97 'b' 98 'c' 99... 'z'... 122 문자상수대응하는값 문자상수대응하는값 문자상수대응하는값 'A' 'B' 'C'... 'Z' 65 66 67... 90 '0' '1' '2'... '9' 48 49 50... 57 '&' '*' '+' 38 42 43 38

주의 ASCII 코드 - 숫자문자와그에대응되는 ASCII 값은완전히다름 - '2' 의값은 2 가아니라 50 - 하지만연속적으로 ASCII 값이배정됨 - '0' : 48, '1' : 49, '2' : 50,... - 알파벳도연속적인값을가짐 - 'a' : 97, 'b' : 98, 'c' : 99,... - 문자와단어를사전적순서로정렬할때유용 39

문자 'a', '+' 와같은문자상수는 char 형이아니라 int 형임 모든정수적형의변수는문자를표현하는데사용될수있음 40

char 자료형 char 형변수는문자와정수값을저장하는데사용됨 char는메모리의 1 바이트에저장됨 - 256개의값을저장할수있음 - 이값들중일부만이실제인쇄문자임 ( 소문자, 대문자, 숫자, 마침표, 특수문자등 ) - 공백, 탭, 개행문자같은여백도있음 41

char 자료형 char, signed char, unsigned char char 는시스템에따라 signed char 또는 unsigned char 와같음 세가지의 char 형은각각 1 바이트에저장됨 (256 개의값표현 ) signed char 형의값의범위 : -128 ~ 127 unsigned char 형의범위 : 0 ~ 255 char 형은정수값을저장하기위해사용될수도있음 42

프로그램 4.6 #include <stdio.h> int main(void) { } char c = 'a'; printf("c = %c\n", c); printf("c = %d\n", c); return 0; 예제프로그램 43

프로그램결과 c = a c = 97 44

프로그램 4.6 #include <stdio.h> int main(void) { } int c = 'a'; printf("c = %c\n", c); printf("c = %d\n", c); return 0; 예제프로그램 45

프로그램결과 c = a c = 97 46

char 자료형 와이드문자 (Wide character) - 문자집합의크기가 256 보다큰언어를다룰때사용 - wchar_t 형 : int 부류자료형중하나로표현 - 일반적인 char 형을네로우문자라고도함 다중바이트문자 - char 형을여러개사용하여한문자표현하는방법 - 와이드문자의크기는일정한반면, 다중바이트문자의크기는표현문자에따라다름 47

논리값과 _Bool 형 논리값을다루기위해 _Bool 형이 C99에추가됨 참과거짓을표현하기위해사용 - 거짓 : 0 - 참 : 1 <stdbool.h> 에유용한매크로정의 - true : 1 - false : 0 - bool : _Bool 48

프로그램 4.8 #include <stdio.h> #include <stdbool.h> int main(void){ } 예제프로그램 bool a, b, c; // _Bool a, b, c; a = true; // a = 1; b = false; // b = 0; c = 324; printf("a = %d, b = %d, c = %d\n", a, b, c); return 0; 49

프로그램결과 a = 1, b = 0, c = 1 50

부동소수로표현 실수표현 모든수를지수형태로변환하여부호, 지수, 가수부로나누어저장 - 4.0 1.0 2 2 - 부호 : + - 지수 : 2 - 가수 : 1.0 IEEE 부동소수 : IEC 60559 표준 - 단정밀도 (32 비트 ), 배정밀도 (64 비트 ), 단확장정밀도 (43 비트이상 ), 배확장정밀도 (70 비트이상 ) 51

단정밀도 0 1 ~ 8 9 ~ 31 부호지수부가수부 실수표현 배정밀도 0 1 ~ 11 12 ~ 63 부호지수부가수부 52

실수 53

메모리내용... 1111 1011 1001 1010 1100 1010 0110 0001 0011 1011 1001 1010 1001 1010 0100 0111 1011 1111 1001 1110 1111 1000 1100 1101 0011 1011 1001 1010 1100 1010 0100 0001 0101 1000 1111 0000 1100 1010 0101 0000 0011 1000 0000 1010 1110 0011 0100 1111... 54

0011 1011 1001 1010 1100 1010 0100 0001 int 0011 1011 1001 1010 1100 1010 0100 0001 flot 0011 1011 1001 1010 1100 1010 0100 0001 char 0011 1011 1001 1010 1100 1010 0100 0001 55

0011 1011 1001 1010 1100 1010 0100 0001 int 0 011 1011 1001 1010 1100 1010 0100 0001 flot 0 011 1011 1001 1010 1100 1010 0100 0001 char 0 011 1011 1001 1010 1100 1010 0100 0001 56

0011 1011 1001 1010 1100 1010 0100 0001 int 0 011 1011 1001 1010 1100 1010 0100 0001 => 1000000069 flot 0 011 1011 1001 1010 1100 1010 0100 0001 => 0.004724 char 0 011 1011 1001 1010 1100 1010 0100 0001 => (65) A 57

부동형 실수값을다루기위해사용함 float, double, long double - float : 단정밀도 - double : 배정밀도 - long double : 시스템종속적 부동형으로모든실수를표현할수없음 58

부동형 부동형에배정될수있는값은정밀도와범위라는속성으로기술됨 - 정밀도 : 부동형이표현할수있는유효숫자수 - 범위 : 부동형이저장할수있는가장큰양수와가장작은양수 59

float 형 부동형 - 정밀도 : 대략유효숫자 6자리 - 범위 : 대략 10-38 에서 10 +38 double 형 - 정밀도 : 대략유효숫자 15자리 - 범위 : 대략 10-308 에서 10 +308 60

부동형 자료형 크기 ( 바이트 ) 범위 변환명세 float 4 10-38 ~ 10 +38 %f, %e, %g, %a double 8 10-308 ~ 10 +308 %f, %e, %g, %a long double?? %Lf, %Le, %Lg 61

프로그램 4.9 #include <stdio.h> int main(void) { } 예제프로그램 float x = 8.8888888888888888888; // 20개의 8 printf("x = %.20f\n", x); return 0; 62

프로그램결과 x = 8.88888931274414062500 63

예제 x = 123.45123451234512345; - x 의실제값 - double : 0.123451234512345 10 3 - float : 0.123451 10 3 주의 - 모든실수를다표현할수는없다. - 정수산술연산과달리부동형산술연산은정확하지않다. 64

부동형상수표기법 십진표기법 - 1.0 또는 1. 또는.0001 지수표기법 - 10진부동형상수 - 1.234567e5 (= 1.234567 X 10 5 ) - 16진부동형상수 - 0x1.234567p5 (= 0x1.234567 X 2 5 ) 65

부동형상수표기법 올바른부동형상수 - 3.14159, 314.159e-2F, 0e0, 1. 잘못된부동형상수 - 3.14,159-314159 -.e0 - -3.14159 66

부동형접미사 접미사 자료형 예제 f, F float 10.24F 1.024e3f 0x1p10f 없음 double l, L long double 10.24 1.024e3 0x1p10 10.24L 1.024e3L 0x1p10L 67

sizeof 피연산자로명시된객체를저장하는데필요한바이트수를알아내기위해사용 - 피연산자로는자료형이나수식이올수있음 사용법 - sizeof(int) : int 의크기알려줌 ; 괄호를생략할수없음 - sizeof(c) : c 의크기를알려줌 ; 괄호생략가능 - sizeof(a + b) : a + b 의형의크기를알려줌 - sizeof a + b : (sizeof a) + b 68

예제프로그램 프로그램 4.10 #include <stdio.h> int main(void){ printf(" 기본자료형의크기 \n\n"); printf(" char:%3d 바이트 \n", sizeof(char)); printf(" short:%3d 바이트 \n", sizeof(short)); printf(" int:%3d 바이트 \n", sizeof(int)); printf(" long:%3d 바이트 \n", sizeof(long)); printf(" long long:%3d 바이트 \n", sizeof(long long)); printf(" unsigned:%3d 바이트 \n", sizeof(unsigned)); printf(" float:%3d 바이트 \n", sizeof(float)); printf(" double:%3d 바이트 \n", sizeof(double)); printf("long double:%3d 바이트 \n", sizeof(long double)); return 0; } 69

프로그램결과 컴퓨터마다다를수있지만다음조건은만족함 sizeof(char) = 1 sizeof(short) <= sizeof(int) <= sizeof(long) sizeof(signed) = sizeof(unsigned) = sizeof(int) sizeof(float) < sizeof(double) < sizeof(long double) 70

실수부와허수부로이루어짐 2.5 + 4.2i _Complex 형사용 float _Complex double _Complex 복소수 long double _Complex _Complex 형변수는두개의부동형실수값을가짐 프로그램에서허수부는 i(i) 로표현함 71

프로그램 4.11 #include <stdio.h> int main(void){ 예제프로그램 double _Complex a = 2.5 + 4.2i; double _Complex b = 2.8I + 3.2; printf("double _Complex 크기 : %d\n\n", sizeof(double _Complex)); 72

예제프로그램 프로그램 4.11 printf(" 복소수 a : %4.2f %4.2f\n", a); printf(" 복소수 b : %4.2f %4.2f\n\n", b); printf(" 복소수 a : %4.2f%+4.2fi\n", a); printf(" 복소수 b : %4.2f%+4.2fi\n\n", b); 73

예제프로그램 프로그램 4.11 printf("a + b = %4.2f%+4.2fi\n", a + b); } printf("a - b = %4.2f%+4.2fi\n", a - b); printf("a * b = %4.2f%+4.2fi\n", a * b); printf("a / b = %4.2f%+4.2fi\n", a / b); return 0; 74

프로그램결과 double _Complex 크기 : 16 복소수 a : 2.50 4.20 복소수 b : 3.20 2.80 복소수 a : 2.50+4.20i 복소수 b : 3.20+2.80i a + b = 5.70+7.00i a - b = -0.70+1.40i a * b = -3.76+20.44i a / b = 1.09+0.36i 75

복소수 <complex.h> 에는 complex 매크로와다양한복소수함수가정의되어있음 #define complex _Complex creal() : 복소수의실수부 cimag() : 복소수의허수부 76

예제프로그램 프로그램 4.12 #include <stdio.h> #include <complex.h> int main(void){ double complex a = 2.5 + 4.2i; printf("a : %4.2f%+4.2fi\n", creal(a), cimag(a)); } return 0; 77

프로그램결과 a : 2.50+4.20i 78

산술수식은값과형을가짐 일반적산술변환 산술수식의피연산자들의형이다르면피연산자의형을변환하여일치시킴 일반적산술변환은컴파일러에의해자동적으로일어남 - 컴파일러는선언문을참조하여이러한일을수행함 - 자동형변환 (Automatic type conversion) - 묵시적형변환 (Implicit type conversion) 79

정수승격 일반적인산술변환 - 정수적수식에서일반적산술변환의한단계로일어남 - _Bool, char, signed char, unsigned char, signed short, unsigned short, 비트필드형은산술수식에서 int 나 unsigned int 로변환 - 예 char a, b, c; c = a + b; // a 와 b 는 int 로정수승격됨 80

일반적인산술변환 기본규칙 : 큰쪽으로형변환 규칙 if ( 한피연산자가 long double) 다른피연산자를 long double 로변환 else if ( 한피연산자가 double) 다른피연산자를 double 로변환 else if ( 한피연산자가 float) 다른피연산자를 float 으로변환 else { 두피연산자에정수승격적용 } if ( 두피연산자의형이같음 ) 자동변환종료 else if ( 한피연산자가 unsigned long long) 다른피연산자를 unsigned long long 으로변환 else if ( 한피연산자가 long long) 다른피연산자를 long long 으로변환 else if ( 한피연산자가 unsigned long) 다른피연산자를 unsigned long 으로변환 else if ( 한피연산자가 long) 다른피연산자를 long 으로변환 else if ( 한피연산자가 unsigned) 다른피연산자를 unsigned 로변환 81

char c; unsigned short s; int i; long l; float f; double d; 일반적인산술변환예제 i = c + s + f + l + d; 82

일반적인산술변환예제 i = (((( c + s ) + f ) + l ) + d ) int int int float float float float double double int int 83

자동변환예제 선언 char c; short s; int i; long l; unsigned u; unsigned long ul; float f; double d; long double ld; 수식형수식형 c - s / i int u * 7 - i unsigned u * 2.0 - i double f * 7 - i float c + 3 int 7 * s * ul unsigned long c + 5.0 double ld + c long double d + s double u - ul unsigned long 2 * i / l long u l system-dependent 84

캐스트 명시적인변환이필요할때가있음 int sum = 9, num = 10; float avg; avg = sum / num; // / : 정수나누기 캐스트연산자 - 괄호안의자료형 (int), (float) - 형을변환하고자하는수식앞에붙임 (float) sum 85

캐스트 캐스트예제 avg = (float) sum / (float) num; avg = (float) sum / num; (double) (num = 10) 잘못된캐스트 (double) num = 10; 86