프로그래밍 언어/C++

C++ 상수 총정리

순정법사 2023.09.05

A. 상수

1. 상수(constant) 개념

a. 상수란?

🌟 상수(constant)란 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간


다른점 👉 프로그램이 실행되는 동안 상수에 저장된 데이터는 변경할 수 없다는 점 💥

 

b. 표현 방식에 따른 상수의 종류

  • 리터럴 상수(literal constant)
  • 심볼릭 상수(symbolic constant)

 

 

2. 리터럴 상수 (literal constant)

🌟  변수와는 달리 데이터가 저장된 메모리 공간을 가리키는 이름이 없는 데이터 그 자체

 

C언어에서는 적절한 메모리 공간을 할당받기 위하여, 기본적으로 변수든 상수든 타입을 가짐

타입에 따라 정수형 리터럴 상수, 실수형 리터럴 상수, 문자형 리터럴 상수, 포인터 리터럴 함수로 나뉨

 

✔ 정수형 리터럴 상수 : 123, -456과 같이 아라비아 숫자와 부호로 직접 표현
✔ 실수형 리터럴 상수 : 3.14, -45.6과 같이 소수 부분을 가지는 아라비아 숫자로 표현
✔ 문자형 리터럴 상수 : 'a', 'Z'와 같이 따옴표('')로 감싸진 문자로 표현

✔ 포인터 리터럴 상수 : 아무것도 가리키고 있지 않은 포인터

 

🤓 예제

123  // 정수형 리터럴 상수
3.14 // 실수형 리터럴 상수
'a'  // 문자형 리터럴 상수

 

a. 정수형 리터럴 상수

🌟 123, -456과 같이 아라비아 숫자와 부호로 직접 표현

 

C++에서는 정수형 상수를 10진수뿐만 아니라 8진수(0으로 시작)나 16진수(0x로 시작)로도 표현

 

이렇게 여러 가지 진법으로 표현된 정수형 상수의 출력을 위해 cout 객체는 dec, hex, oct 조정자를 제공

이 세 가지 조정자를 cout 객체에 전달하면 사용자가 다시 변경하기 전까지 출력되는 진법의 형태를 계속 유지함

 

❔ 예제 : 숫자 10을 각각 10진수, 8진수, 16진수의 형태로 출력

#include <iostream>
using namespace std;

int main()
{
	int a = 10;
	cout << "숫자 10을 10진수로 표현하면 " << a << "이며, " << endl;
	cout << oct;
	cout << "숫자 10을  8진수로 표현하면 " << a << "이며, " << endl;
	cout << hex;
	cout << "숫자 10을 16진수로 표현하면 " << a << " 입니다.";
	return 0;
}

✨ 실행결과

숫자 10을 10진수로 표현하면 10이며, 
숫자 10을  8진수로 표현하면 12이며, 
숫자 10을 16진수로 표현하면 a 입니다.

 

💙 정수형 리터럴 상수의 타입

 

정수형 리터럴 상수는 다음과 같은 경우를 제외하면 모두 int형으로 저장

 

1) 데이터의 값이 너무 커서 int형으로 저장할 수 없는 경우

2) 정수형 상수에 접미사를 사용하여, 해당 상수의 타입을 직접 명시하는 경우

 

C++에서는 접미사를 상수의 끝에 추가하여, 해당 상수의 타입을 직접 명시

 

접미사 타입
기본 설정 (signed) int형
u 또는 U unsigned int형
l 또는 L (signed) long형
ul 또는 uL 또는 Ul 또는 UL unsigned long형
long long 또는 u11 또는 U11 또는 uLL 또는 ULL unsigned long long형 (C++11부터 제공)

 

b. 실수형 리터럴 상수

🌟 3.14, -45.6과 같이 소수 부분을 가지는 아라비아 숫자로 표현

 

실수형 리터럴 상수는 모두 double형(부동 소수점 방식)으로 저장

 

💙 실수형 리터럴 상수의 타입

 

정수형과 같이 접미사를 추가하여 저장되는 타입을 직접 명시가능

 

접미사 타입
f 또는 F float형
기본 설정 double형
l 또는 L long double형

 

c. 포인터 리터럴 상수 

널 포인터 : 아무것도 가리키고 있지 않은 포인터

 

💙 널 포인터 선언

  • 0으로 초기화된 널 포인터
  • nullptr 키워드 👍 (아래 설명)

 

✔ C++11부터 제공

✔ 0으로 초기화된 널 포인터보다 더 제대로 널 포인터를 표현

✔ 타입 : 포인터 타입

✔ 정수형 변환 ❌

✔ nullptr == 0은 참(true)을 반환 (0을 사용해 널 포인터를  0으로 초기화하기 때문)

 

💥 nullptr 리터럴 상수를 사용하는 것이 좀 더 안전한 프로그램을 만듦

 

d. 이진 리터럴 상수

🌟  0B 또는 0b의 접두사와 0과 1의 시퀀스를 가지고 이진 리터럴 상수를 표현

= 2진법으로 표현한 데이터

 

✔ C++14부터 제공

 

🤓 예제

auto a = 0B010111;

 


3. 심볼릭 상수(symbolic constant)

🌟  변수와 마찬가지로 이름을 가지고 있는 상수

 

반드시 선언과 동시에 초기화해야 함

 

💙 심볼릭 상수 선언방법 2가지

  • const 키워드를 사용 (c++) : 가급적 지향
  • 매크로를 이용하여 선언 (C)

🤓 예제

const int MAX = 10; // const 키워드를 이용한 심볼릭 상수

#define MAX 10;     // #define 선행처리 지시자를 이용한 매크로 심볼릭 상수

 

💙 const 키워드를 사용한 심볼릭 상수의 장점

⦁ 상수의 타입을 명시적으로 지정
⦁ 구조체와 같은 복잡한 사용자 정의 타입에도 사용
⦁ 해당 심볼릭 상수를 특정 함수나 파일에서만 사용할 수 있도록 제한

 

 

 


출처 : http://www.tcpschool.com/c/c_datatype_constant

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com