본문 바로가기
C++/강의 정리

[C++ 섹션 2.데이터 갖고 놀기] 1 - 정수

by 몽실이 2022. 1. 16.
인프런 강의 "[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) 정수 오버플로우 예시