프로그래밍 1 1 Chapter 4. Constant and Basic Data Types April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj
이장의강의목표 2 기본자료형문자표현방식과문자자료형상수자료형변환
기본자료형 (1/8) 3 변수 (Variables) 이름이부여된기억장소변수는자료형 (type, 유형 ) 을가지고있음 종류 기본타입 (Basic types) 열거형타입 (Enumerated types) void 타입 (The type void) 사용자정의타입 (Derived types) 설명 a. 정수타입 (integer types) b. 실수타입 (floating-point types) 정수형의상수정의, 프로그램의이해를쉽게해줌 값을지정하지않음 a. 포인터 (pointer types) b. 배열 (array types) c. 구조체 (structure types) d. 공용 (union types) e. 함수 (function types)
기본자료형 (2/8) 4 기본자료형의종류 정수형 실수형 자료형크기값의표현범위 char 1 byte -128 to 127 or 0 to 255 short 2 bytes -32,768 to 32,767 int 4 bytes -2,147,483,648 to 2,147,483,647 long 4 bytes -2,147,483,648 to 2,147,483,647 long long 8 bytes -9,233,372,036,854,775,808 to +9,233,372,036,854,775,807 float 4 bytes 1.2E-38 to 3.4E+38 double 8 bytes 2.3E-308 to 1.7E+308 long double 8 bytes 이상 3.4E-4932 to 1.1E+4932 자료형의크기는시스템별로다름 정수형에는 unsigned 를사용하여 0 과정수만표현가능
기본자료형 (3/8) 5 sizeof 연산자 Queries size of the object or type sizeof (types); or sizeof expression; 사용법 char ch=9; int num=100; float pipi=3.14; printf("size of char : %d \n", sizeof(ch)); printf("size of int : %d \n", sizeof(inum)); printf("size of int : %d \n", sizeof inum); printf("size of int : %d \n", sizeof(int)); printf("size of float : %d \n", sizeof float);...
기본자료형 (4/8) 6 자료형의크기예 #include <stdio.h> char ch=9; int inum=1052; double dnum=3.1415; printf(" 변수 ch 의크기 : %d \n", sizeof(ch)); printf(" 변수 inum 의크기 : %d \n", sizeof(inum)); printf(" 변수 dnum 의크기 : %d \n", sizeof(dnum)); printf("char 의크기 : %d \n", sizeof(char)); printf("int 의크기 : %d \n", sizeof(int)); printf("long 의크기 : %d \n", sizeof(long)); printf("long long 의크기 : %d \n", sizeof(long long)); printf("float 의크기 : %d \n", sizeof(float)); printf("double 의크기 : %d \n", sizeof(double)); return 0; Results 변수 ch 의크기 : 1 변수 inum 의크기 : 4 변수 dnum 의크기 : 8 char 의크기 : 1 int 의크기 : 4 long 의크기 : 4 long long 의크기 : 8 float 의크기 : 4 double 의크기 : 8 Q: 많은자료형중에어떤자료형을선택해야하는가?
기본자료형 (5/8) 7 정수표현을위한일반적인자료형선택 #include <stdio.h> char ch1=1, ch2=2, result1=0; short sh1=300, sh2=400, result2=0; printf("size of ch1 & ch2: %d, %d \n", sizeof(ch1), sizeof(ch2)); printf("size of sh1 & sh2: %d, %d \n", sizeof(sh1), sizeof(sh2)); printf("size of char add: %d \n", sizeof(ch1+ch2)); printf("size of short add: %d \n", sizeof(sh1+sh2)); result1=ch1+ch2; result2=sh1+sh2; printf("size of result1 & result2: %d, %d \n", sizeof(result1), sizeof(result2)); return 0;
기본자료형 (6/8) 8 정수표현을위한일반적인자료형선택 Results size of ch1 & ch2: 1, 1 size of sh1 & sh2: 2, 2 size of char add: 4 size of short add: 4 size of result1 & result2: 1, 2 sizeof(ch1+ch2) sizeof(sh1+sh2) Q: 왜 char 크기와 short 크기가 4 바이트인가? A: CPU 의기본연산단위는 int ( 레지스터와관련 )
기본자료형 (7/8) 9 실수표현을위한일반적인자료형선택 값의표현범위보다중요한것은 정밀도 실수자료형 소수점이하정밀도 바이트수 float 6 자리 4 double 15 자리 8 long double 18 자리 12 (8)
기본자료형 (8/8) 10 실수표현을위한일반적인자료형선택 #include <stdio.h> double rad; double area; printf(" 원의반지름입력 : "); scanf("%lf", &rad); area = rad*rad*3.1415; printf(" 원의넓이 : %f \n", area); return 0; %lf : double 입력서식 %f : double 출력서식 Results 원의반지름입력 : 2.5 원의넓이 : 19.634375
문자표현방식과문자자료형 (1/3) 11 ASCII 코드 미국표준협회 (ANSI) 에서아스키 (ASCII) 코드를제정 ANSI: American National Standards Institute ASCII: American Standards Code for Information Interchange 총 128개의문자로구성 10진수 16진수 값 65 41 A 66 42 B 67 43 C 68 44 D 97 61 a 98 62 b 99 63 c <ASCII table> Q: A 와 a의 10진수값의차이는?
문자표현방식과문자자료형 (2/3) 12 C 에서문자표현 문자표현 1 int main() char ch1 = 'A'; char ch2 = 'C';... 문자표현 2 int main() char ch1 = 65; char ch2 = 67;... char ch1 char ch2 65 A 67 C 메모리에는문자가아니라숫자가저장됨 < 물리메모리 >
문자표현방식과문자자료형 (3/3) 13 문자인식의예 Q1: ch3 = 321 이면출력되는값은? Q2: Hello 와같은문자열을저장하고싶으면? #include <stdio.h> char ch1='a', ch2=65; int ch3='z', ch4=90; Results printf("%c %d \n", ch1, ch1); printf("%c %d \n", ch2, ch2); printf("%c %d \n", ch3, ch3); printf("%c %d \n", ch4, ch4); return 0; A 65 A 65 Z 90 Z 90 %d : 정수값출력 %c : 문자출력
상수에대한이해 (1/6) 14 상수 ( 常數, constants) 의정의 상수는값이변하지않는데이터 상수의종류 이름이없는상수 literal 상수이름이있는심볼릭 (symbolic) 상수 const 상수
상수에대한이해 (2/6) 15 이름이없는상수 (literal) 상수의예 int main() int num = 10 + 20;... int num 30 10 20 type? type? 10 20 < 물리메모리 > Q: type 의변수자료형은무엇일까요?
상수에대한이해 (3/6) 16 상수의자료형 변수의예 #include <stdio.h> printf("literal int size: %d \n", sizeof(7)); printf("literal double size: %d \n", sizeof(7.14)); printf("literal char size: %d \n", sizeof('a')); return 0; Results 7 7.14 literal int size: 4 literal double size: 8 literal char size: 4 A Q: char 의변수자료형은 4byte 일까요? < 물리메모리 >
상수에대한이해 (4/6) 17 접미사를이용한다양한상수표현 int 이외의다양한정수표현 double 이외의실수표현 상수의예 #include <stdio.h> float f1 = 5.678; float f2 = 3.23 + 5.12; return 0; 상수값뒤에 f 또는 F 추가예 ) float f1 = 5.678f;
상수에대한이해 (5/6) 18 접미사를이용한다양한상수표현 정수표현을위한접미사 접미사 자료형 사용예 U unsigned int unsinged int k = 1025U; L long long k = 2467L UL unsigned long unsigned long k = 3456UL LL long long long long k = 5768LL ULL unsinged long long unsinged long long k = 8979ULL 실수표현을위한접미사 접미사자료형사용예 F float float k = 1025F; L long duble long double k = 2467L
상수에대한이해 (6/6) 19 이름있는심볼릭상수 : const 상수 1) const 키워드사용 선언과동시에값을초기화해야함 2) 매크로 (macro) 를이용하는방법 상수의예 #include <stdio.h> const int MAX = 100; const double PI = 3.1415; MAX = 350; error C2166: l-value specifies const object return 0; Tip: 상수이름만들기 1. 상수이름은대문자로표시 2. 둘이상의단어는 _ 로연결 ( 예, HOUSE_COUNT)
자료형의변환 (1/6) 20 자료형변환의정의 데이터의표현을바꾸는것예 ) char 데이터를 int 데이터로변환 자료형변환의종류 1) 자동형변환 ( 묵시적형변환 ) 2) 강제형변환 ( 명시적형변환 )
자료형의변환 (2/6) 21 자동형변환 1 : 대입연산과정에서발생 형변환예 (1) #include <stdio.h> int n1 = 3.1415; double n2 = 123; return 0; test.c(4): warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data Q: Correct or not? 형변환예 (2) #include <stdio.h> int n3 = 129; char c1 = n3; return 0; Q: Correct or not?
자료형의변환 (3/6) 22 자동형변환예 #include <stdio.h> double num1=245; int num2=3.1415; int num3=129; char ch=num3; printf(" 정수 245 를실수로 : %f \n", num1); printf(" 실수 3.1415 를정수로 : %d \n", num2); printf(" 큰정수 129 를작은정수로 : %d \n", ch); return 0; Results 정수 245 를실수로 : 245.000000 실수 3.1415 를정수로 : 3 큰정수 129 를작은정수로 : 127
자료형의변환 (4/6) 23 자동형변환 -2 정수의승격 (Integral Promotion) #include <stdio.h> short n1=15, n2=15; short n3=n1+n2; return 0; 정수의승격, 대입연산과정 Q: 정수의승격이의미가있는가?
자료형의변환 (5/6) 24 자동형변환 3 피연산자의자료형불일치로발생 #include <stdio.h> double n1=5.15+19; return 0; 계산가능? * 2 가지로계산이가능 1) int 로변환 2) double 로변환 int long long long float double long double < 산술연산에서형변환규칙 > Rule : 데이터손실의최소화
자료형의변환 (6/6) 25 명시적형변환 강제로일으키는형변환 #include <stdio.h> Type casting operator int num1=3, num2=4; double divresult; divresult=(double)num1/num2; printf(" 나눗셈결과 : %f \n", divresult); return 0; Results 나눗셈결과 : 0.750000 ( 명시적형변환 : O) 나눗셈결과 : 0.000000 ( 명시적형변환 : X)
이장의결론 26 C 언어의기본자료형이해 자료형의종류및데이터의표현범위 sizeof 연산자 문자표현방식과자료형 상수 ASCII 코드 리터럴상수와심볼릭상수 자료형의변환
Quiz 27 1) int x; 가있을때x에정수값이얼마일때아래와같은결과가출력되는가? 또한이때정수값과2진수값을적으시오. C 문장 : printf("%c \n", x); 출력결과 : C 정수값, 2 진수값 :