인프런 강의 "[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문"
강의를 정리한 글입니다.
프로그래밍을 단순하게 생각하면 적절한 데이터를 저장하고 가공하는 것이다.
그중에서도 가장 빈번하게 사용되는 것이 정수
변수 선언 방법
[타입] [변수명];
[타입] [변수명] = [초기 값];
데이터 영역
- c++에서는 변수에 초기값이 있는지에 따라서. data,. bss 영역에 알아서 세팅한다.
- .data 영역 : 0이 아닌 초기화 값이 있는 변수의 영역
- .bss 영역 : 초기값이 0이거나, 초기값이 없는 변수의 영역
- .data, .bss영역이란 어셈블리 언어에서 관리하는 데이터 관리 영역
데이터 타입
signed 타입
char a; // 1바이트 (-128 ~ 127)
short b; // 2바이트 (-32768 ~ 32767)
int c // 4바이트 (-21.4억 ~ 21.4억)
__int64 d // 8바이트 (어마어마하게 크다)
- 기본 타입으로 unsigned타입으로 따로 설정하지 않으면 signed타입이다.
- 부호가 있는 타입
- 최상위 비트는 부호 표시 (ex) 1000 0000에서 1이 [-]부호 표시 0일 경우 [+] 부호 표시
- 최상위 비트 하나만 1로 커져있으면 그 데이터 사이즈의 최대 음수 값이다.
- 비트 계산 방법은 최상위 비트(-최댓값)에다가 다른 비트 값들을 더한 수
- ex) 1000 0011 = -125의 값은 -> -128 + 2 + 1을 통해 나온다.
- signed 타입의 최대 갑은 최상위 비트 빼고 나머지를 다 켜준 값
ex) 0111 1111 (127) - sgined 타입의 최소 값은 최상위 비트면 켜준 값
ex) 1000 0000 (-128)
unsigned 타입
unsigned char a; // 1바이트 (0 ~ 255)
unsigned short b; // 2바이트 (0 ~ 65536)
unsigned int c // 4바이트 (0 ~ 42.9억)
unsigned __int64 d // 8바이트 (0 ~ 어마어마하게 큼)
- 양수 [+]만 나타내는 타입
- 부호 표시 비트로 최상위 비트를 필요가 없어서 양수의 표현 범위가 늘어난다.
- signed의 최상위 비트 값이 양수로 더해지는 거라 생각
양수로만 표시하는 데이터는 무조건 unsigned가 좋은가?
답은 없다
음수 [-]로 들어가면 안 되는 부분이 버그로 떠서 발견되어 빨리 고치는 게 더 좋을 수도 있다.
- 프로그램이 방식의 차이
데이터 범위 설정의 오류
// 정수 오버플로우
int b = 32767;
b = b + 1
// b의 값은 - 32768
// 정수 언더플로우
unsigned ub = 0
ub = ub - 1;
// ub의 값은 65535
- 컴퓨터는 주어진 타입의 비트 단위 계산만 하기 때문에 양수인지 음수인지에 따라 따로 계산하지 않는다.
ex) 정수 오버플로우 예시
'C++ > 강의 정리' 카테고리의 다른 글
[C++ 섹션 1.어셈블리 언어 입문] 4 - 변수와 레지스터 (0) | 2022.01.05 |
---|---|
[C++ 섹션 1.어셈블리 언어 입문] 3- 레지스터 기초 (0) | 2022.01.04 |
[C++ 섹션 1.어셈블리 언어 입문] 2 - 데이터 기초 (0) | 2022.01.03 |
[C++ 섹션 1.어셈블리 언어 입문] 1 - 환경 설정 (0) | 2022.01.02 |