프로그래밍 공부
작성일
2024. 1. 3. 20:03
작성자
WDmil
728x90

1.1.3 변수

 

C++에서 변수는 코드 내 어디에서나 선언할 수 있고, 선언한 후에는 해당 선언이 속한 블록 내의 선언 이후 코드에서 그 변수에 접근할 수 있다.

 

변수를 선언할 떄는 초깃값을 설정해야 하지만, 초깃값을 설정하지 않고도 가능하며, 그렇게 하면 초깃값은 변수가 할당된 메모리 영역에 들어있던 값이 된다.

 

이러한 값은 쓰레기값으로, 명시적인 초깃값 설정이 없는 변수 선언은 버그를 유발할 수 있기 때문에 피하는것이 옳다.

 

int uninitializedInt;
int initalizedInt = 7;

cout << uninitalizedInt << " is a random value" << endl;
cout << initializedInt << " was assigned an inital value" << endl;

 

위 코드를 통해 첫 변수가 초기화 되지 않았음으로, 임의의 값이 출력되고, 초깃값 설정 변수는 항상 7을 출력함을 알 수 있다.

 

이 코드는 변수값을 cout 스트림을 통해 출력하는 방법도 보여준다.

데이터 타입 설명 사용 예
int
singned
음 또는 양의 정수, 표현 가능한 크기는 컴파일러에 따라 다르다. int i = -1;
signed j = -5;
short (int) shrot 정수 (보통 2바이트) short s = 13;
long (int) long 정수 (보통 4바이트 크기) long l = -7L;
long long (int) long long 정수, 표현가능한 크기는 컴파일러에 따라 다르나, 최소 long정수 이상으로, 보통 8바이트 크기 long long ll = 14LL;
unsigned int
unsigned short ( int )
unsigned long ( int )
unsigned long long ( int )
0을 포함한 양수만 표현 가능한 정수 unsigned int i = 2U;
unsigned j = 5U;
unsigned shrt s = 23U;
unsigned long l = 5400UL;
unsigned long long ll = 140ULL;
float 부동소수점수 float f = 7.2f;
double 배정밀도 부동소수점수, 최소 float이상의 정밀도 표현 가능 double f = 7.2;
long double long 배정밀도 부동소수점수, 최소 double 이상의 정밀도로 표현가능 long double d = 16.98L;
char 8비트 문자 char ch = 'm';
char16_t 16비트 문자 char16_t c16 = u'm';
char32_t 32비트 문자 char32_t c 32 = U'm';
wchar_t 와이드 문자, 컴파일러에 따라 다름 wchar_t w = L'm';
bool 참 또는 거짓을 나타내는 문자 타입. 1비트 bool b = true;

 

C++에서는 string 타입을 제공함으로, wchar이나 char를 사용할일이 크게 없다.

 

변수는 캐스팅을 통해 다른 타입으로 변환할 수 있다.

 

예를들어 float 을 int로 캐스팅이 가능하다.

 

C++에서는 명시적인 변수 타입 캐스팅을 위해 3가지 방법을 제공한다.

 

첫번째 방법은 변수앞에 캐스팅할 타입을 괄호로 명시하는방법.

두번째 방법은 타입 생성자 함수를 이용하는 방법 ( 더 자연스러운 방법이다 )

세번째 방법은 다소 번거롭지만, 가장 명확한 방법으로 캐스팅 연산자를 사용하는 방법이다.

float myFloat = 3.14f;
int i1 = (int) myFloat;				// 방법1
int i2 = int(myhFloat);				// 방법 2
int i3 = static_cast<int>(myFLoat);	// 방법3

 

 

int변수의 캐스팅 결과는 부동소수점수 에서 소수점 이하 부분을 잘라낸 것 과 같다.

 

어떤 상황에서는 타입 캐스팅이 강제(coerced) 일어날 수 있다. 이런 경우를 묵시적 캐스팅 이라고 한다.

 

예를 들어. short타입 변수는 long타입 변수로 명시적인 타입캐스팅 없이도 자동으로 캐스팅 될 수 있다.

 

왜냐하면, long타입은 short타입과 같이 정수를 표현하면서도, 그 표현 범위가 넓기 때문이다.

 

변수가 자동으로 타입 캐스팅 될 때 에는 데이터 손실이 발생하는지를 고려해야 한다.

 

예를들어 float변수가 int변수로 캐스팅되면, 소수점 이하 값들은 잃어버리게 된다.

 

이러한 행도을 대부분의 컴파일러는 경고 메세지를 출력한다.

 

하지만, 앞에서 short변수를 long 변수로 캐스팅 하는 예처럼 데이터 손실 가능성이 없을 때 에는 묵시적으로 타입 캐스팅이 일어나도 아무런 문제 표시가 나타나지 않는다.

728x90