02. C++ 언어 변수와 여러가지 데이터 타입
- 변수, Variable란?
- 변수는 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미합니다.
- 즉, 변수란 데이터를 저장할 수 있는 메모리 공간을 의미하며, 이렇게 저장된 값은 변경될 수 있습니다.
- 변수의 이름 생성 규칙
- 변수의 이름은 영문자(대소문자), 숫자, 언더스코어(_)로만 구성할 수 있습니다.
- 변수의 이름은 숫자로 시작할 수 없습니다.
- 변수의 이름 사이에는 공백을 포함할 수 없습니다.
- 변수의 이름으로 C++에서 미리 정의된 키워드(예약어)는 사용할 수 없습니다.
- 변수 이름의 길이에는 제한이 없습니다.
- 변수의 선언
- 변수를 저장하기 위한 메모리 공간을 할당받아야 하는데 이 행위를 변수의 선언이라고 부릅니다.
- C++에서 변수를 선언하는 방법에는 다음과 같이 두 가지 방법이 있습니다.
1. 변수의 선언만 하는 방법
int num; // 먼저 변수를 선언하여 메모리 공간만 할당받고, 나중에 변수를 초기화
2. 변수의 선언과 동시에 초기화하는 방법
int num = 10; // 변수를 선언과 동시에 값을 초기화
- 상수, Constant란?
- 상수란 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미합니다.
- 상수는 변수와 다르게 프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없습니다.
- 표현 방식에 따른 상수
- C++에서 상수는 표현 방식에 따라 다음과 같이 나눌 수 있습니다.
1. 리터럴 상수 (Literal Constant)
- 리터럴 상수는 변수와 다르게 저장된 메모리 공간을 가리키는 이름을 가지고 있지 않습니다.
- C++에서 상수는 타입에 따라 정수형 리터럴 상수, 실수형 리터럴 상수, 문자형 리터럴 상수 등으로 구분할 수 있습니다.
- 정수형 리터럴 상수는 123, -456과 같이 숫자와 부호로 표현, 실수형 리터럴 상수는 3.14, 0.12와 같이 소수 부분을 가진 숫자로 표현, 문자형 리터럴 상수는 'a', 'b'와 같이 따옴표(' ')로 감싸진 문자로 표현됩니다.
cout<< 123 << endl; // 정수형 리터럴 상수
cout<< 3.14 << endl; // 실수형 리터럴 상수
cout<< 'a' << endl; // 문자형 리터럴 상수
2. 심볼릭 상수 (Symbolic Constant)
- 심볼릭 상수는 변수와 마찬가지로 이름을 가지고 있고 선언과 동시에 초기화해야 합니다.
- 심볼릭 상수는 매크로를 이용하거나, const 키워드를 사용하여 선언할 수 있습니다.
const int num = 20;
- 데이터 타입
- 데이터 타입은 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할을 합니다.
- 기본 타입
- C++에서는 여러 형태의 타입을 제공하는데 이것을 기본 타입이라고 이러한 기본 타입은 정수형, 실수형, 문자형, bool형 타입으로 나눌 수 있습니다.
- 정수형 타입, Integer Type
- 정수란 부호를 가지고 있으며, 소수 부분이 없는 수를 의미합니다.
- 정수형 데이터에 unsigned 키워드를 추가하면, 음의 정수를 표현할 수 없지만 부호를 나타내는 최상위 비트(MSB)까지도 크기를 나타내는데 사용할 수 있습니다.
- MSB : Most Significant Bit, 1바이트를 구성하는 8개의 비트 중 최고값을 갖는 비트를 의미합니다.
- 정수형 타입에는 short, int, long, long long 타입이 존재합니다.
- 실수형 타입, Float Type
- 실수란 소수부나 지수가 있는 수를 가리키며, 정수보다 훨씬 더 넓은 표현 범위를 가집니다.
- 하지만 컴퓨터에서 실수를 표현하는 방식은 오차가 발생할 수 밖에 없는 태생적 한계를 지닙니다.
- 실수형 타입에는 float, double, long double 타입이 존재합니다.
- 문자형 타입, Character Type
- 문자형 데이터는 작은 정수나 문자 하나를 표현할 수 있는 타입을 가리킵니다.
- 문자형 데이터는 아스키코드(ASCII)를 통해 128개의 문자 인코딩 방식을 사용합니다.
- 문자형 타입은 char 타입이 존재합니다.
- Bool 형 타입
- bool 형은 참(true)이나 거짓(false) 중 한 가지 값만을 가질 수 있는 불리언 타입입니다.
- 부동 소수점 수
- 실수를 표현하기 위한 두 가지 방식
1. 고정 소수점(Fixed Point) 방식
- 실수는 보통 정수부와 소수부로 나눌 수 있습니다.
- 따라서 실수를 표현하는 가장 간단한 방식은 소수부의 자릿수를 미리 정하여, 고정된 소수를 표현하는 것입니다.
- 이 방식은 정수부와 소수부의 자릿수가 크지 않으므로 표현할 수 있는 범위가 매우 적다는 단점이 있습니다.
2. 부동 소수점(Floating Point) 방식
- 부동 소수점 방식은 가수부와 지수부로 나누어 실수를 표현하는 방식입니다.
- 부동 소수점 방식은 다음 수식을 이용하여 매우 큰 실수까지도 표현할 수 있습니다.
±(1.가수부)×2지수부-127
- 현재 C++에서 자주 사용되는 부동 소수점 방식은 대부분 IEEE 754 표준을 따르고 있고, float, double형 실수를 표현하면 다음과 같습니다.
- 타입 변환, Type Conversion
- C++에서 다른 타입끼리의 연산은 우선 피연산자들을 모두 같은 타입으로 만든 후 수행됩니다.
- 이처럼 하나의 타입을 다른 타입으로 바꾸는 행위를 타입 변환이라고 합니다.
- C++에서는 다음과 같은 경우 자동으로 타입 변환을 수행합니다.
- 다른 타입끼리의 대입, 산술 연산 시
- 함수에 인수를 전달할 때
- 타입 변환의 종류
1. 묵시적 타입 변환 (자동 타입 변환)
- 묵시적 타입 변환은 대입 연산이나 산술 연산에서 컴파일러가 자동으로 수행해주는 타입 변환을 가리킵니다.
- 대입 연산 시 연산자의 오른쪽에 존재하는 데이터 타입이 연산자 왼쪽에 존재하는 데이터 타입으로 묵시적 타입 변환이 진행됩니다.
int num1 = 3.1415; // 3.1415는 int 타입에 맞춰 num1에는 3이 저장
int num2 = 8.3E12; // 8.3E12는 int 타입에 맞춰 num2에 8만 저장된다.
2. 명시적 타입 변환 (강제 타입 변환)
- 명시적 타입 변환은 사용자가 타입 캐스트 연산자를 사용하여 강제적으로 수행하는 타입 변환을 가리킵니다.
int num1 = 1;
int num2 = 4;
// 피연산자를 명시적으로 변환
double result1 = (double) num1 / num2;
double result2 = double (num1) / num2;