안녕하세요? 수구리입니다.
지난 시간에는 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 |