윤성우저열혈강의 C 프로그래밍개정판 Chapter 05. 상수와기본자료형
Chapter 05-1. C 언어가제공하는기본자료형의이해 윤성우저열혈강의 C 프로그래밍개정판
자료형은데이터를표현하는방법입니다. 실수를저장할것이냐? 정수를저장할것이냐! 값을저장하는방식이실수냐정수냐에따라서달라지기때문에용도를결정해야한다. 얼마나큰수를저장할것이냐! 큰수를표현하기위해서는많은수의바이트가필요하다. 이름이외에메모리공갂 의할당에있어서필요한 두가지정보 요청의예 " 아! 제가정수를저장할건데요. 크기는 4 바이트로하려고합니다. 그정도면충분할 거에요. 그리고변수의이름은 num 으로할게요.." 제대로된요청 C 언어에서의예 int num; 동일한요청 자료형의수는데이터표현방법의수를뜻한다. C 언어가제공하는기본자료형의수가 10 개라면, C 언어가 제공하는기본적인데이터표현방식의수는 10 개라는뜻이된다.
기본자료형의종류와데이터의표현범위 컴파일러에따라서약갂의차이를보인다. C의표준에서는자료형별상대적크기를표준화할뿐구체적인크기까지언급하지는않는다. 크게정수형과실수형으로나뉘다. 데이터를표현하는방식이정수형과실수형두가지로나뉘므로! 정수형에도실수형에도둘이상의기본자료형이존재한다. 표현하고자하는값의크기에따라서적젃히선택할수있도록다수의자료형이제공!
연산자 sizeof 를이용한바이트크기의확인 변수 num과 int의크기를계산하여그결과로 sz1과 sz2를초기화 sizeof 연산자의피연산자로는변수, 상수및자료형의이름등이올수있다. 소괄호는 int와같은자료형의이름에만필수! 하지만모든피연산자를대상으로소괄호를감싸주는것이일반적! 실행결과
정수의표현및처리를위한일반적자료형선택 일반적인선택은 int이다. CPU가연산하기에가장적합한데이터의크기가 int형의크기로결정된다. 연산이동반이되면 int형으로형변환이되어서연산이진행된다. 따라서연산을동반하는변수의선언을위해서는 int로선언하는것이적합히다. char형 short형변수는불필요한가? 연산을수반하지않으면서 ( 최소한의연산만요구가되면서 ) 많은수의데이터를저장해야한다면, 그리고그데이터의크기가 char 또는 short로충분히표현가능하다면, char 또는 short 로데이터를표현및저장하는것이적젃하다. + 연산결과의크기가 4바이트인이유는피연산자가 4바이트데이터로형변환되었기때문이다. 실행결과
실수의표현및처리를위한일반적자료형선택 실수자료형의선택기준은정밀도실수의표현범위는 float, double 둘다충분히넓다. 그러나 8바이트크기의 double이 float보다더정밀하게실수를표현한다. 일반적인선택은 double이다. 컴퓨팅환경의발젂으로 double형데이터의표현및연산이덜부담스럽다. float형데이터의정밀도는부족한경우가많다. double 형변수의출력서식문자 %f double 형변수의입력서식문자 %lf - printf - scanf 실행결과
unsigned 를붙여서 0 과양의정수만표현 정수자료형의이름앞에는 unsigned 선언을붙일수있다. unsigned 가붙으면, MSB 도데이터의크기를표현하는데사용이된다. 따라서표현하는값의범위가양의정수로제한이되며양의정수로두배늘어난다.
Chapter 05-2. 문자의표현방식과문자를위한자료형 윤성우저열혈강의 C 프로그래밍개정판
문자의표현을위한약속! 아스키 (ASCII) 코드! 미국표준협회 (ANSI: American National Standards Instute) 에의해서제정된 아스키 (ASCII: Amerian Standard Code for Information Interchange) 코드 컴퓨터는문자를표현및저장하지못한다. 따라서문자를표현을목적으로각문자에고유한숫자를지정한다. 인갂이입력하는문자는해당문자의숫자로변환이되어컴퓨터에저장및인식이되고, 컴퓨터에저장된숫자는문자로변환이되어인갂의눈에보여지게된다. 컴파일시각문자는 해당아스키코드값으로변환 C 프로그램상에서문자는작은따옴표로묶어서표현 따라서실제로컴퓨터에게젂달되는데이 터는문자가아닌숫자이다.
문자는이렇게표현되는거구나! 서식문자 %c 해당숫자의아스키코드문자를출력해라! 실행결과 문자를 char형변수에저장하는이유모든아스키코드문자는 1바이트로도충분히표현가능문자는덧셈, 뺄셈과같은연산을동반하지않는다. 단지표현에사용될뿐이다. 따라서 1바이트크기인 char형변수가문자를저장하기최적의장소이다. 문자는 int형변수에도저장이가능하다.
Chapter 05-3. 상수에대한이해 윤성우저열혈강의 C 프로그래밍개정판
이름을지니지않는리터럴상수! 연산을위해서는 30, 40과같이프로그램상에표현되는숫자도메모리공갂에저장되어야한다. 이렇게저장되는값은이름이존재하지않으니변경이불가능한상수이다. 따라서리터럴상수라한다. 메모리공갂에저장이되어야 CPU 의연산대상이된다.
리터럴상수의자료형 실행결과 리터럴상수도자료형이결정되어야메모리공갂에저장이될수있다. 위예제의실행결과는다음사실을의미한다. 정수는기본적으로 int 형으로표현된다. 실수는기본적으로 double 형으로표현된다. 문자는기본적으로 int 형으로표현된다.
접미사를이용한다양한상수의표현 실수는 double 형상수로인식이되어 데이터손실에대한경고메시지발생 접미사를통해서상수의자료형을변경 할수있다.
이름을지니는심볼릭 (Symbolic) 상수 : const 상수 상수의이름은 모두대문자로표시하고, 둘이상의단어를연결할때에는 MY_AGE 와같이언더바를이용해서두단어를구분하는것이관례!
Chapter 05-4. 자료형의변환 윤성우저열혈강의 C 프로그래밍개정판
대입연산의과정에서발생하는자동형변환 대입연산자의왼편을기준으로형변환이발생한다. 정수 245는 245.0의비트열로재구성이되어변수 num1에저장된다. 실수 3.1415는 int형데이터 3의비트열로재구성이되어변수 num2에저장된다. 4 바이트변수 num3 에저장된 4 바이트데이터중상위 3 바이트가손실되어변수 ch 에저장된다. 00000000 00000000 00000000 10000001 10000001
자동형변환의방식정리 형변환의방식에대한유형별정리 정수를실수로형변환 3은 3.0으로 5는 5.0으로 ( 오차가발생하게된다 ). 실수를정수로형변환 소수점이하의값이소멸된다. 큰정수를작은정수로형변환 작은정수의크기에맞춰서상위바이트가소멸된다. 실행결과
정수의승격에의한자동형변환 일반적으로 CPU 가처리하기에가장적합한크기의정수자료형을 int 로정의한다. 따라서 int 형연산의속도가다른자료형의연산속도에비해서동일하거나더빠르다. 따라서다음과같은방식의 형변환발생 이를가리켜 정수의승격 (Integral Promotion) 이라한다.
피연산자의자료형불일치로발생하는자동형변환 double num1 = 5.15 + 19; 두피연산자의자료형은일치해야한다. 일치하지않으 면일치하기위해서자동으로형변환이발생한다. 아래의자동형변환규칙을근거로 int 형데이터 19 가 double 형데이터 19.0 으로형변환이 되어덧셈이진행된다. 산술연산에서의 자동형변환규칙 바이트크기가큰자료형이우선시된다. 정수형보다실수형을우선시한다. 이는데이터의손실을최소화하기위한기준이다.
명시적형변환 : 강제로일으키는형변환 num1 과 num2 가정수이기때문에몪만반환이되는 정수형나눗셈이진행 실행결과 divresult = (double)num1 / num2; (type) 은 type 형으로의형변환을의미한다. num1 이 double 형으로명시적형변환그리고 num1 과 num2 의 / 연산과정에서의산술적자동형변환! 그결과실수형나눗셈이진행되어 divresult 에는 0.75 가저장된다. 추천하는코드작성스타일 자동형변환이발생하는위치에명 시적형변환표시를해서형변환이 발생함을알리는것이좋다!
Chapter 05 가끝났습니다. 질문있으신지요?