리메이크 중/C,C++ 이론 중심

C(&C++) 이론 8. 데이터 타입과 상수

라이피 (Lypi) 2023. 1. 4. 17:53
반응형

목록용 썸네일 이미지


내용 참고

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 : 저장된 값이지만 그 값을 프로그래밍적으로 바꿀 수 없는 것을 의미한다.

 

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 문자)를 사용하여 표현할 수 있다.

Escape 문자표


 

반응형