내용 참고
YES C (정보공학연구소/생능출판사)
혼자 연구하는 C/C++ (SoEn.kr /와우북스)
자료형(Data type)과 상수(Constant)
Ⅰ. 자료형/데이터 타입(data type)
C언어에서 자료형이란 데이터를 메모리에 저장할 때 알맞은 공간을 할당하고, 적절한 형태로 출력하기 위해서 사용되는 것이다.
1. 기본형 : 하나의 데이터를 저장하기 위해 사용되는 자료형
■ 문자형 : 문자 하나를 저장하는데 사용.내부적으로는 정수형과 구조가 같다. (char 등)
■ 정수형 : 소수점이 없는 정수 데이터를 저장하는데 사용. (int, long, short 등)
■ 실수형 : 소수점이 있는 실수 데이터를 저장하는데 사용. (float, double 등)
■ void형 : 아직 타입이 지정되어있지 않거나, 값을 지정하지 않음을 명시적으로 표현할 때 사용.
■ 열거형 : 가능한 값들에 대한 나열형. 내부적으로 정수형 상수로 처리된다. (bool 등)
2. 복합형 : 하나 이상의 데이터를 저장하는 자료형
■ 배열 : 같은 타입 자료들의 집합
■ 구조체 : 다른 타입 자료들의 집합
■ 공용체 : 메모리를 공유하는 자료 집합
■ 포인터 : 대상체의 번지를 가리키는 타입
■ 함수형 : 함수의 번지를 가리키는 타입
3. 데이터 타입별 메모리 크기 확인하는 코드
■ 순수 C언어
#include <stdio.h>
int main()
{
printf("문자형 \n");
printf("char\t: %dbyte \n", sizeof(char));
printf("정수형 \n");
printf("int\t: %dbyte \n", sizeof(int));
printf("long\t: %dbyte \n", sizeof(long));
printf("실수형 \n");
printf("float\t: %dbyte \n", sizeof(float));
printf("double\t: %dbyte \n", sizeof(double));
return 0;
}
■ C++ 스타일
#include <iostream>
using namespace std;
int main()
{
cout << "문자형" << endl;
cout << "char\t: " << sizeof(char) << "byte" << endl;
cout << "정수형" << endl;
cout << "int\t: " << sizeof(int) << "byte" << endl;
cout << "long\t: " << sizeof(long) << "byte" << endl;
cout << "실수형" << endl;
cout << "float\t: " << sizeof(float) << "byte" << endl;
cout << "double\t: " << sizeof(double) << "byte" << endl;
return 0;
}
Ⅱ. 상수(constant)
1. 상수
■프로그램 중 그 값이 명시되어 변하지 않는 것으로 정수형 상수, 실수형 상수, 문자 상수, 문자열 상수가 있다.
■ 상수라고하면 기본적으로 이름을 붙이지 않고 값을 그대로 쓴 것(literal)을 의미하지만
■ const키워드를 이용하거나 #define등을 이용해서 literal값에 이름을 지정한 것 또한 상수(constant)라 한다.
2. literal과 constant의 차이
■ literal : 이름을 붙이지 않은 값 그 자체를 의미한다.
■ constant : 저장된 값이지만 그 값을 프로그래밍적으로 바꿀 수 없는 것을 의미한다.
3. 상수(constant) 선언 방법
■ 전처리 단계에서 #define '명칭' '값'의 형태로 선언
■ 변수를 선언하듯이 const '데이터타입' '변수명' = '값'의 형태로 선언
■ #define 선언시에는 마지막에 ;(세미콜론)을 붙이지 않음을 주의할 것.
#include <iostream>
#define de_int 10
int main()
{
using namespace std;
const int con_int = 20;
cout << "de_int: " << de_int << endl;
cout << "con_int: " << con_int << endl;
return 0;
}
4. 정수 상수의 특징
■ 아무 태그도 붙이지 않으면 singed int 타입으로 지정된다.
■ 값의 크기가 int의 한계를 넘으면 자동으로 long int 타입으로 지정된다.
■ '0'으로 시작하는 값은 8진법으로 인식한다. (ex. 033 = 27 등)
■ '0x' 또는 '0X'로 시작하는 값는 16진법으로 인식한다. (ex. 0x1A = 31 등)
■ 부호없는 값으로 저장하고 싶으면 숫자 뒤에 'u'나 'U'를 붙인다. (ex. 12u, 015U, 0xF1U 등)
■ 명시적으로 long int 타입으로 지정하고 싶다면 숫자 뒤에 'l' 또는 'L'을 붙인다. (ex. -11l, 077l, 0x1aL 등)
■ 명시적으로 unsigned long int 타입으로 지정하고 싶다면 'ul' 또는 'UL'를 붙인다. (ex. 31ul, 015UL 등)
5. 실수 상수의 특징
■ 실수 상수는 기본적으로 double 타입으로 지정된다.
■ float 타입으로 지정하고 싶으면 숫자 뒤에 'f' 또는 'F'를 붙인다.
■ long double 타입으로 지정하고 싶으면 숫자 뒤에 'l' 또는 'L'을 붙인다.
■ 실수는 소수점을 사용하여 표현하는 '십진형 표현'과 10진수와 E를 사용하여 표현하는 '지수형 표현'을 사용하여 표기할 수 있다.
6. 문자 상수의 특징
■ 문자를 홀따옴표로 묶어서 표현한다. (ex. 'a' 등)
■ 혹은 아스키코드 값을 직접 홀따옴표로 묶어서 표현한다. (ex. '\246', '\0x3B' 등)
■ 문자 상수는 아스키(ASCII)코드값으로 저장되어 표현된다.
■ 아스키코드의 0x00~0x19까지는 특수문자, 제어문자 영역이다.
■ 이 영역은 문자상수 표현이 어려우므로 기능코드(Escape 문자)를 사용하여 표현할 수 있다.