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 키워드를 사용한 심볼릭 상수의 장점
⦁ 상수의 타입을 명시적으로 지정
⦁ 구조체와 같은 복잡한 사용자 정의 타입에도 사용
⦁ 해당 심볼릭 상수를 특정 함수나 파일에서만 사용할 수 있도록 제한
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 자료형의 타입 변환 (0) | 2023.09.05 |
---|---|
[자료형(data type)] C++ 기본형 총정리 (0) | 2023.09.05 |
[게임 프로그래머 입문 올인원] 데이터와 로직 : 변수, 상수 (3, 4, 5강) (2) | 2023.09.02 |
[게임 프로그래머 입문 올인원] 데이터와 로직 : 프로그래밍 개론 (2강) (0) | 2023.09.02 |
[게임 프로그래머 입문 올인원] 데이터와 로직 : 환경 설정 (1강) (0) | 2023.09.02 |