변수 선언 방법
1. [타입] [이름] ;
2. [타입] [이름] = [초기값] ;
#include <iostream>
using namespace std;
int hp = 100;
int main()
{
cout << "체력이 " << hp << " 남았습니다." << endl;
// std::cout << "체력이 " << hp << " 남았습니다."; -> using namespace std; 안 쓸 경우
}
타입 종류
char // 1 byte, -128 ~ 127
short // 2 byte, -32768 ~ 32767
int // 4 byte, -21억 ~ 21억
__int64 (== long long) // 8 byte, 경을 넘어간다.
타입은 각 변수가 가질 수 있는 총량을 결정한다.
char는 총 1 byte 만큼의 총량을 가진 타입이다. 1 byte는 8 bit 이므로 최대 정수는 127, 최소 정수는 -128이다.
모든 타입은 기본적으로 (signed) 를 생략하고 있다. signed 은 부호가 있다라는 의미를 가졌다.
signed char hp = 2;
그러면 최대 최소 정수는 어떻게 알 수 있는지 알아보자.
8 bit 는 이진수의 총량을 결정한다. 127과 -128을 8 bit로 나타내면 0111 1111과 1000 0000이다.
최대값의 맨 앞 bit 가 0인 이유는 부호 bit 이기 때문이다. 정수의 맨 앞 bit 가 0이면 양수, 1이면 음수를 나타내기 때문이다.
최소값은 최대값의 맨 앞 0의 이유를 알게 되면 자연스레 알 수 있으니 넘어가겠다.
따라서 char 의 최대, 최소값은 127과 -128인 것을 알 수 있다.
unsigned char uHp = 255;
unsigned는 무조건 양수임을 나타낸다. 따라서 unsigned char의 최대값은 255이고, 최소값은 0이다.
unsinged를 붙이면 해당 타입의 최대값은 signed 때의 최대값 + 최소값과 같다. ( 255 = 127 + 128 )
여기까지 왔으면 정수 타입은 int 만 쓰면 최대 최소값을 신경 쓰지 않아도 괜찮다고 생각할 것이다.
하지만 콘솔과 모바일 게임을 만들때는 메모리가 늘 부족하기 때문에 최대한 용량을 줄여야 한다.
반대로 온라인 게임에서 __int64 를 쓰면 문제가 생길 수 있다. 온라인 게임은 동시 접속자 수가 만 명을 넘어갈 때가 있다. 이런 상황에서 한 명의 유저당 경을 넘는 데이터를 네트워크를 통해 주고받는 것은 매우 비효율적이다.
최대 정수에서 +1을 하면 어떻게 될까?
int main()
{
short b = 32767;
b = b + 1;
cout << b << endl; // 예상한 b 값은 32768 아니면 error!
}
결과값은 놀랍게도 -32768이 나온다. 32767 = 0111 1111 1111 1111이다. -32768 = 1000 0000 0000 0000이다. 이진수 덧셈을 안다면 간단한 문제이므로 넘어가겠다. 반대로 최소값에서 -1을 한다면 최대값이 된다.
출처
https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-1/dashboard
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
시리즈를 원활하게 학습하기 위한 기초적인 C++ 문법들에 대해 학습합니다. 어셈블리 언어부터 시작해서 기본 C++ 문법, STL, C++11까지 핵심적인 내용을 압축해서 다루게 됩니다., - 강의 소개 | 인
www.inflearn.com
'프로그래머 > CPP_강의정리' 카테고리의 다른 글
cpp 데이터 TIP (0) | 2021.09.05 |
---|---|
cpp const와 메모리 구조 (0) | 2021.09.04 |
cpp 비트 연산과 비트 플래그 (0) | 2021.08.21 |
cpp 문자와 문자열 (0) | 2021.08.17 |
cpp 불리언과 실수 (0) | 2021.08.16 |