프로그래머/CPP_강의정리

cpp 정수

미역국마싯 2021. 8. 15. 16:18

변수 선언 방법

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