🌈 프로그래밍/C++

[C++] 1.1.3 ~ 1.1.4 리터럴과 변수

반응형

 

안녕하세요? 수구리입니다.

지난 시간에는 namespace에 대하여 알아보았는데요 ~

오늘은 리터럴과 변수에 대한 내용을 정리해보려고 합니다!!

 

 

1.1.3 리터럴(literal)


리터럴은 의역하자면 " 말 그대로 " 라는 뜻이에요.

 

즉, 값 자체가 이름이라는 뜻이죠. C++에서는 다양한 리터럴들을 제공해준다고 합니다.

 

- 십진수 리터럴, 123
- 8진수 리터럴, 0173
- 16진수 리터럴, 0x7B
- 이진수 리터럴, 0b111011

 

위의 예시에서는 모두 같은 숫자 123을 뜻한다고 합니다.

 

그리고 또 리터럴 타입을 직접 정의할 수도 있다고 합니다! 이 내용은 한참 뒤에 다시..

 

(참고) 

C++부터는 16진수 부동소수점 리터럴도 지원한다.

ex) 0x3, ABCp-10, 0XB.cp121, etc..

 

 

다음은 바로 변수에 대하여 알아보도록 하겠습니다.

 

 

1.1.4 변수


프로그래밍을 한 번이라도 해보셨다면 이 변수에 대한 내용은 정말 익숙하리라고 생각합니다.

 

변수란 말 그대로 변하는 수를 의미하고 코드 어디에서나 선언을 할 수 있으며,

현재 블록 안에서 변수를 선언한 줄 다음부터 어디에서나 그 변수에 접근할 수 있다고 합니다.

 

다들 변수를 선언하실 때 초기화를 하시나요??

 

저는 보통 해주는 편입니다! 변수를 선언할 때 반드시 초기값을 넣어주지는 않아도 상관은 없지만..

 

초기화하지 않은 변수는 선언할 시점의 메모리값을 기반으로 무작위 값 (흔히 쓰레기 값이라고 하죠?)이 대입될 수 있는데, 이로 인해 버그 발생 가능성이 높아집니다.

 

다행히도 C++에서는 변수 선언과 동시에 초기값을 대입하는 기능을 제공하고 있다고 합니다!

 

바로 예시를 보시죠!

 

// 변수 선언하기
int uninitializedInt;
int initializedInt = 7;

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

 

출력을 해보시면 아마 uninitializedInt 에는 무작위 값이 들어있을 겁니다..

 

 

C++에서 자주 사용하는 타입 정리


타입 설명
(signed) int
signed
부호가 있는 정수를 표현한다.
값의 범위는 컴파일러마다 다르다. (대부분 4byte)
(signed) short (int) 작은 범위의 정수 (대부분 2byte)
(signed) long (int) 큰 범위의 정수
(signed) long long (int) 아주 큰 범위의 정수를 표현한다. 최소한 long 보다는 크다.
(대부분 8byte)
unsigned (int)
unsigned short (int)
unsigned long (int)
unsigned long long (int)
위에 나온정수 타입의 범위를 >= 0 (0보다 큼) 으로 제한한다.
float 단정도(single) 부동소수점수
double 배정도(double) 부동소수점수.
정밀도가 최소한 float보다 크다.
long double 롱배정도(long double) 부동소수점수.
정밀도가 최소한 double보다 크다.
char 단일 문자
char16_t 16bit 단일 문자
char32_t 32bit 단일 문자
wchar_t 단일 확장 문자.
bool 부울 타입. 1, 0 중 하나의 값을 갖는다.
std::byte 한 byte를 표현한다.

 

변수는 위와 같이 타입이 존재하는데 이 타입을 실행 도중에 변경할 수도 있습니다.

 

바로캐스팅(casting)을 통해서 말이죠. 이는 동적 형 변환, 타입 캐스팅 이라고도 합니다.

 

간단하게 예를 들면 float 타입으로 지정된 변수를 int로 캐스팅한다는 것입니다.

 

그러면 아마도 표현되는 부분이 없어지겠죠?? 

 

왜냐하면 더 많은 범위를 표현할 수 있는 float type에서 더 작은 int type으로 변환해주기 때문입니다.

 

 

 

C++에서 변수의 타입을 명시적으로 변환하는 방법

float pi = 3.14f

// 1. C 언어에서 사용하던것으로 C++ 에서는 피해야 하지만 여전히 많이 쓰이는 방법
int i1 = (int)pi;


// 2. 거의 사용하지 않는 방법
int i2 = int(pi);


// 3. 길지만 명확한 방법
int i3 = static_cast<int>(pi);

 

아까 위에서 잠깐 언급하였는데,

 

변수를 자동으로 캐스팅할 때 데이터가 손실될 수 있다는 점에 주의해야 합니다.

 

따라서 왼쪽에 나온 타입이 오른쪽에 나온 타입과 완전히 호환된다고 확신이 들 때에만 자동 캐스팅을 사용해야 합니다.

 

오늘은 리터럴과 변수에 대하여 알아보았습니다.

 

감사합니다! : )

 

 

반응형

'🌈 프로그래밍 > C++' 카테고리의 다른 글

[C++] 1.1.6 타입  (0) 2021.08.12
[C++] 1.1.5 연산자  (0) 2021.08.12
[C++] 1.1.2 namespace  (0) 2021.08.10
[C++] 1.1.1 Hello World..!  (2) 2021.08.09
[C++] 전문가를 위한 C++ 책을 펼치며..  (5) 2021.08.08