3. 자료와변수
3.1 자료형
자료형 컴퓨터는숫자 (= 데이터 ) 를다룬다. 컴퓨터가다룰수있는숫자의유형이있다. C 언어에서의자료형 크기 (byte) 정수형 ( 문자형 ) char 1 정수형 실수형 ( 부동소수형 ) short 2 int 4 long 4 long long 8 float 4 double 8 long double 8 / 16 강 C 프로그래밍 3
정수형 정수형이란 가장많이사용되는자료형 정수형의종류 자료형 크기 (byte) 범위 char 1-128 ~ 127 short 2-32,768 ~ 32,767 int 4-2,147,483,648 ~ 2,147,483,647 long 4-2,147,483,648 ~ 2,147,483,647 long long 8 약 -922경 ~ 922경 ( 이하자리생략 ) 강 C 프로그래밍 4
정수형 자료형의선택 자료의범위를수용할수있어야한다. 가능하면작은크기의자료형이좋다.( 메모리사용량, 계산속도 ) int 형 과거의 int 형은 16비트였으나, 현재는 32비트 미래에 64비트이상이될수도있음. char 형 정수형이며, 문자를저장하는목적으로사용할수있기에문자형으로볼수도있다. 강 C 프로그래밍 5
실수형 실수 소수점이하가존재 부동소수형 (floating point) 정수에비해훨씬큰숫자, 또는훨씬미세한숫자 자료형 크기 (byte) 유효자리 범위 float 4 7 ±10-38 ~ 10 38 double 8 15 ±10-308 ~ 10 308 long double 8 15 ±10-308 ~ 10 308 Visual Studio 에서만 long double 이 8 바이트이고, 대부분 12/16 바이트이다. 강 C 프로그래밍 6
실수형 - 3.4 * 10 38-3.4 * 10-37 3.4 * 10-37 3.4 * 10 38-0 float 형 + - 1.7 * 10 308-1.7 * 10-307 1.7 * 10-307 1.7 * 10 308-0 double 형 + 강 C 프로그래밍 7
실수형 단점 유효자리가있다. ( 생각보다짧다 ) 처리속도가느리다. 오차의발생가능성이많다. 실수의단점이치명적인분야라면 해결책을개발자가찾아야한다. 강 C 프로그래밍 8
문자형 컴퓨터는숫자만다룬다. 일정범위의숫자에문자를할당하여문자를처리할수있도록 한다. char 형은문자를저장하기에적합한크기의자료형이다. (int 는?) ASCII Code 0~127 까지의숫자에문자를대응시켜문자저장용으로쓴다. ASCII Code 는숫자를문자처럼해석하는하나의방법이다. 대표적인문자의 ASCII Code 0~9 48 ~ 57 대문자 A, 소문자 a 65, 97 강 C 프로그래밍 9
문자형 ASCII Code table 강 C 프로그래밍 10
unsigned 형 정수형자료형에 unsigned 를추가하여범위를두배로사 용 자료형 범위 unsigned char 0 ~ 255 unsigned short 0 ~ 65,535 unsigned int 0 ~ 4,294,967,295 unsigned long 0 ~ 4,294,967,295 unsigned long long 0 ~ 1800경 음수를넣어서는안되는경우보호장치로사용가능 기본제공되지않는자료형은개발자가만들어서사용해야한다. 강 C 프로그래밍 11
C 언어자료형의이해 무조건큰범위의자료형을선택한다면? 모든정수는 long long? 모든실수는 long double? 메모리는소중하다. 정수 (int) 1개는 4 바이트를차지하지만, 정수 (int) 10억개는 4GB를차지한다. 짧은단위일수록처리속도가빠르다. char 형덧셈이 long long형덧셈보다훨씬빠르다. 정수형연산이실수형연산보다훨씬빠르다. 실수를정수로변환하여연산할수도있다. 강 C 프로그래밍 12
3.2 변수
변수 프로그램에서데이터를저장 / 사용하기위한공간 ( 주메모리 ) 변수는이름을붙여서사용한다. 변수에는언제든새로운값을저장할수있다. 변수에값이저장되면언제든그값을가져올수있다. 변수는반드시자료형을가져야한다. 변수는사용하기전에반드시선언되어야한다. 자료형, 변수이름 강 C 프로그래밍 14
변수의선언 자료형변수명 ; 자료형변수명 1, 변수명 2, ; 어떤자료형을가진어떤이름의변수를필요한만큼선언 선언의예 int number; 주메모리 number value score int value, score, total; 선언의위치 변수를사용하기전 현재는 int main ( ) { 의다음줄에넣는다. 강 C 프로그래밍 15
변수에값넣기 변수명 = 값 ; 변수에값을넣을때 = 를이용한다. 오른쪽에있는값을왼쪽의변수에넣는다. score = 90; 주메모리 90 number value score 강 C 프로그래밍 16
변수의이름 변수의이름에대한규칙 문자 ( 알파벳 ), 숫자, _ (underscore, underbar) 변수이름의첫글자는무조건문자또는 _ 변수이름에대소문자를구별한다. 한글변수명도사용가능 C99에서지원 ( 어느나라언어든가능 ) 기존개발자들사이에서익숙하지않아가급적쓰지않기를권장 변수이름의예 적절한예 (number, _number7, My_address) 적절하지않은예 (7even, num@#, score-score) 강 C 프로그래밍 17
변수의이름 좋은변수이름 이름만으로도무엇을저장하는변수인지짐작할수있어야한다. 변수의자료형을알수있으면더좋다. 개발도구가변수의자료형을알려준다. 두개이상의단어를사용해도좋다. totalnum, myaddress 등 좋지않은변수이름 a, b, c, a1, a2, aaaa, bbbb, kkk 강 C 프로그래밍 18
변수의이름 둘이상의단어가결합된변수의작명 단어의시작문자를대문자로 : AverageScore, TotalScore 단어사이에 _ 를붙인다 : average_score, total_score 변수의자료명 itotalscore : 정수형변수임을변수명에서바로알수있다. faveragescore : 실수형변수 사용할수없는변수명 (keyword, 또는 reserved word) C 언어에서별도의목적으로사용하도록예약된단어들 auto, break, case, char, const, continue, default, do, double else, enum, extern, float, for, goto, if, return, short, sighed, 강C프로그래밍 19 sizeof, static, struct, switch, typedef, union, unsigned, void,
변수초기화 int value; value = 10; int value = 10; 변수선언과동시에값을넣어준다. 여러변수의선언과초기화예 int number = 20, value = 30, score = 50; 변수를선언하고초기화하지않으면쓰레기값이들어있다. 모든변수를초기화해야하는것은아니다. 강 C 프로그래밍 20
변수의초기화 다음은정상적인경우이다. int value, name ; // value 변수는초기화하지않아도된 다. // 쓰레기값이들어있지만, name = 50; value = name; // value 변수의쓰레기값을쓰기전에 // 다른값으로채우기때문이다. 다음은경고또는에러가나온다. int value, name; value = name; name 변수가초기화되지않아쓰레기값이있는데그쓰레기를 value에넣으려하고있다. 강 C 프로그래밍 21
sizeof 연산자 자료형의크기를알려주는연산자 int score; score = 99; printf( %d\n, sizeof (int)); // int 형의크기를출력 printf( %d\n, sizeof score); // score 변수의크기를출력 시스템마다자료형의크기가다를수있다. 이때 sizeof 연산자로확인하는것이좋다. 강 C 프로그래밍 22
3.3 C 프로그램에서의숫자
상수 값을나타내는자료예 문자형상수 A 정수형상수 10, 384 실수형상수 5.321 score = 10; 상수 강 C 프로그래밍 24
이름상수 (named constant) 변수처럼식별자에값을부여한다. 값을바꿀수없고, 프로그램실행내내지정한값만을가질수 있다. 사용법 const int MAX_SCORE = 100 ; score = MAX_SCORE; 이름상수를쓰는이유 프로그램의가독성향상 실수로값을변경하는것을방지 바람직한상수명 대문자로사용한다. : 변수와달리상수라는것을표시 강 C 프로그래밍 25
진수표기법 C 프로그램에서사용가능한진수 8, 10, 16진수 2진수상수는프로그램에서직접사용하지않는다. 2, 8, 16 진수의관계 2진수 3자리를묶으면 8진수 2진수 4자리를묶으면 16진수 110010100110 2 진수 0100110010100110 2 진수 6 2 4 6 8 진수 4 C A 6 16 진수 강 C 프로그래밍 26
진수표기법 C 프로그램에서진수의표현 8진수 : 숫자앞에 0을붙인다. 16진수 : 숫자앞에 0x를붙인다. 사용예 : value = 010; // 8진수 10, 즉, 8을 value에넣는다. Score = 0x10; // 16진수 10, 즉 16을 score에넣는다. 프로그램에서 2 진수를이용하여입력하는방법은없다. 8 진수또는 16 진수로변환하여입력해야한다. 강 C 프로그래밍 27
지수형자료의입력 수입력의한계 10^100 을입력하기위해다음과같이할수없다. ( 에러 ) double fvalue = 10000000000000000000000000000000000000000 지수형태의입력이가능하다. fvalue = 1.0e100; 강 C 프로그래밍 28
오버플로 / 언더플로 C 언어에서의자료형크기 (byte) 표현범위 char 1-128~127 short 2-32768 - 32767 정수형 int 4-2,147,483,648 ~ 2,147,483,647 long 4-2,147,483,648 ~ 2,147,483,647 long long 8 약 -922경 ~ 922경 ( 이하자리생략 ) 표현범위를벗어날경우 char 형에서 -128보다작거나 ( 언더플로 ) 127보다클때 ( 오버플로 ) 오버플로 / 언더플로 따로에러로간주하지않으나, 예상치못한값이들어있다. 발생하지않도록하는것이바람직하다. 강 C 프로그래밍 29
수와접미사 float a, b; a = 0.1; // 경고가나온다 b = 0.5; // 정상이다. 실수형상수도 float 형과 double 형으로구분된다. double 상수를 float형변수에넣으려하면자료손실가능성으로경고가나온다상수를특정한자료형으로정의할때접미사를사용한다. a = 0.1F; // 0.1 을 float 형으로간주하라. 접미사의종류 U, L, UL, LL, ULL( 이상정수형접미사 ), F, L ( 이상실수형접미사 ) 강C프로그래밍 30
3.4 컴퓨터에서수를표현하는방 법
정수의표현 2 의보수로표현하는음의정수양의정수 -2,147,483,648 1000..0000 2,147,483,647 0111.. 1111-2,147,483,647 1000..0001 2,147,483,646 0111..1110-3 1111..1101 3 0000..0011-2 1111..1110 2 0000..0010-1 1111..1111 1 0000..0001 0 0000..0000 0 0000..0000 오버플로 / 언더플로의결과를이표에서찾아보자. 강 C 프로그래밍 32
실수의표현 ± 1. fffffffffffffffffffffff 2 eeeeeeee 127 가수 지수 0 e e e e e e e e f f f f f f f f f f f f f f f f f f f f f f f 1 bit 8 bit 23 bit long double 형은시스템마다구성이다르다. 강 C 프로그래밍 33