언리얼 - C++ 2 : 자료형 개념, 정수형 자료형

김정환·2025년 3월 3일

Unreal C++

목록 보기
2/37

📘 자료형과 메모리 개념 정리 및 요약

1. 자료형 (Data Type)

  • 데이터 형태를 명시하는 것.
  • 주요 자료형:
자료형크기 (byte)설명
char1문자형
short2작은 정수형
int4기본 정수형
long4큰 정수형
long long8매우 큰 정수형
float4단정도 실수형
double8배정도 실수형

2. 메모리 단위

  • 1 byte = 8 bit
  • 1 KB = 1024 byte
  • 1 MB = 1024 KB
  • 1 GB = 1024 MB
  • 1 TB = 1024 GB

3. 1 byte 정수 표현

  • 부호 없는 정수 (unsigned char): 0 ~ 255
  • 부호 있는 정수 (signed char): -128 ~ 127
  • MSB (Most Significant Bit): 최상위 비트가 부호를 결정.

4. 음수 표현과 2의 보수법

  • CPU는 음수를 2의 보수로 표현:
    1. 비트 반전
    2. 1을 더하기
2  = 00000010
-2 = 11111110  // (비트 반전 후 +1)

5. 자료형 크기와 선택 기준

  • short(2B) → 65,536개 값 표현
  • int(4B) → 약 42억 개 값 표현
  • 필요한 만큼의 범위를 가진 자료형을 선택해야 함.
    • 예) 체력(HP)이 int 범위를 초과하면 음수가 되는 버그 발생 가능.

6. 메모리 해석 차이

같은 값도 자료형에 따라 다르게 해석됨.

unsigned char c = 255;  // 255로 해석
signed char c = 255;    // -1로 해석



1️⃣ 주석 Comment

  • 주석된 곳은 컴파일러가 코드로 인식하지 않음.
  • 주로 설명이나 원치않는 코드를 실행하지 않는 용도로 작성.

2️⃣ 자료형 Data type

자료형은 사용할 데이터의 형태를 설명하는 것. == Data Type
어떤 형태의 자료인지 명시하는 것.

int i = 0;

// int : 자료형
// i : 변수의 이름
/*
	정수형 int 자료를 i라고 정의했다.
    4 byte 크기의 정수형 자료를 만들었다.
*/

정수형 자료형

  • char, short, int, long, long long

  • 같은 정수형인데 왜이리 많나? -> 사이즈가 다름

    자료형크기 (단위 : byte)
    char1
    short2
    int4
    long4
    long long8

실수형 자료형

  • float, double

    자료형크기 (단위 : byte)
    float4
    double8

단위

  • 1 byte == 8 bit

bit

  • 메모리에서 더 이상 쪼갤 수 없는 최소 단위.
  • 0, 1로 구성된 가장 작은 단위. 있다 or 없다 표현
  • 8개의 bit로 이루어진 단위 => byte

byte

210 byte == 1024 byte == 1 KB
1024 KB == 1 MB
1024 MB == 1 GB
1024 GB == 1 TB

1 TB == 240 byte


1 byte로 할 수 있는 것?

  • 1 byte == 8 bit
    • 1 bit : 0, 1 상태 표현.
      즉, 2가지 경우를 표현.
    • 8 bit : 28 == 256 가지의 상태(경우)를 표현할 수 있음.
      2진수로 표현해서 사용.
      • ex)
        0000 0000 == 0
        0000 0001 == 1
        0000 0010 == 2
        ...
        1111 1111 == 255
  • 1 byte
    • 256 가지 경우를 표현할 수 있음.
    • 1 바이트가 정수로 표현할 수 있는 범위는? (256가지 경우의 수)
      • 양수만 표현하는 정수 : 0, 양수 => 0 ~ 255
      • 일반적인 정수 : 음수, 0, 양수 => -128 ~ 127
// 1 byte => 넣을 수 있는 수의 범위
// 0과 양수만 표현할 때 : 0 ~ 255

// 음수를 제외하고 양수까지 표현할 때 붙이는 키워드 unsigned
unsigned char c = 0;
c = 255;	// 양수만 표현할 때, 1 byte가 가질 수 있는 최댓값

c = 256;	// Q1. 어떻게 될까? 
c = -1;		// Q2. 어떻게 될까? 

➕ 질문

  • 기초를 다질 때, 이런 질문들을 해야함.
    • 범위가 제한되었다고 하는데, 범위를 넘는 값을 넣는다면 어떻게 되는지 질문해야,
      더 깊게 이해할 수 있는 것.

Q1. c = 256;

256의 표현

  • 1111 1111 (255) + 0000 0001 (1)
  • 덧셈 결과 : 1 0000 0000
    • 하지만 1 byte로는 8개의 bit만 표현할 수 있으므로
      앞자리 1을 떼고 0000 0000 값만 취함.
  • unsigned char c = 256;
    결과적으로 0000 0000 (0)이 되는 것.

Q2. c = -1;

  • 문법적으로 오류는 아님.
  • 0~255 값을 표현하겠다는 변수에 -1을 넣은 것뿐.

음의 정수

signed char ch = 0;
  • signed : 음수, 0, 양수를 표현
    • signed 키워드는 보통 생략함.
      그래서 일반적으로 char ch; 형태로 작성.
  • 음수를 표현해야해서 범위가 줄어듦.
    • -128 ~ 127
  • signed char 자료형의 8 bit 중 첫번째 bit를 음수, 양수 판단에 사용.
0:000 0000 (0)
...
0:111 1111 (127)

0:000 0000 양수 표현 (2^7 == 128)
1:000 0000 음수 표현 (2^7 == 128)

이런 식으로 음수, 양수를 나누는데 쓰인 첫번째 bit를
가장 중요한 비트(MSB: Most Significant Bit), 최상위 비트라고 표현


1은 0000 0001으로 표현함.
-1의 표현은 1000 0001일까?

컴퓨터가 음수를 표현하는 방식

  • 덧셈 처리
    • 자릿수대로 더하기
  0000 0001 (1)
  0000 0010 (2)
= 0000 0011 (3)

  0000 0001
  1010 0011
= 1010 0100
  • 뺄셈 처리
    • 일반적인 뺄셈식 : 5 - 4 = 1
    • CPU가 처리하는 뺄셈식 : 5 + (-4)
    • 즉, 뺄셈을 음수의 덧셈으로 처리함.
  • CPU가 처리하는 음수 개념
    • 10 + x == 0 : 10과 더해서 0이 나오는 수가 -10
    • 이 상태를 표현하는 비트가 -10이라고 CPU는 정의함.

예시 1

127 == 0111 1111
127과 더해서 0이 나오는 수가 -127

    0111 1111
+   1000 0001
= 1 0000 0000

덧셈으로 자릿수를 넘김.
1 byte는 8 bit의 크기이므로 0000 0000 (0)만 취함.

그러므로 -1271000 0001로 표현.

예시 2

1 == 0000 0001
1과 더해서 0이 나오는 수가 -1

	0000 0001
+	1111 1111
= 1 0000 0000
8 bit만 취하여 -11111 1111로 표현

Q3. char ch = 255;

  • char 의 범위 : -128 ~ 127
  • 255를 넣으면 어떻게 될까?
unsigned에서 2551111 1111로 표현
signed1111 1111 값이 들어간 것.

앞선 계산에서 signed1111 1111-1로 취급.
char ch = 255; // -1

Q4. 255 대입

char c1 = 0;
c1 = 255;	// 어떻게 될까?

unsigned char c2 = 0;
c2 = 255;	// 어떻게 될까?

char c1 = 255;

c1의 표현 범위 -128 ~ 127
255 : 1111 1111

c1 = 1111 1111;
음수를 표현하는 자료형이므로 값은 -1로 처리

unsigned char c2 = 255;

c2의 표현 범위 0 ~ 255
255 : 1111 1111

c2 = 1111 1111;
0과 양수를 표현하는 자료형이므로 값은 255로 처리

unsigned char c2 = -1;

c2의 표현 범위 0 ~ 255
signed에서 -1 : 1111 1111로 표현

c2 = 1111 1111;
0~255를 표현하는 자료형이므로 값은 255로 처리

동일한 메모리 크기 공간동일한 값이 들어가더라도
이 값을 어떻게 처리할지, 해석할지는 관점에 따라 전혀 다른 의미로 표현할 수 있는 것.

이것이 포인터의 기반 이해로 이어질 것

음수를 빨리 찾는 법 : 2의 보수법

  • 컴퓨터가 정의하는 음수 : 양수를 0으로 만드는 수 (비트값)
  • 2의 보수법 : 양수 비트를 반전시킨 뒤, 1을 더하는 것.
2 = 0000 0010
-2 구하기

   0000 0010
=> 1111 1101 : 2의 비트를 반전
=> 0000 0001 : 1의 값을 더함.
=> 1111 1110

     0000 0010
+    1111 1110
=    1111 1120
=> 1 0000 0000

자료형의 크기

  • short : 2 byte
  • char 보다 메모리 크기가 커짐.
    즉, 표현할 수 있는 수의 범위가 늘어남.
    • 1 byte == 28 == 256
    • 2 byte == 28 * 28 == 216 == 65536
  • int : 4 byte
    • 1 byte == 28
    • 4 byte == 232 == 42억~

자료형 선택 이유
자신이 사용할, 필요한만큼의 범위를 표현할 수 있는 자료형을 선택해야함.

int 형으로 체력을 선언해뒀음.
초기 출시에는 200~300의 데미지를 주거나했음.

근데, 오래된 이후에 버프 등으로 값이 양수 int의 최댓값을 넘어가서
오히려 음수가 된 문제가 발생.

이를 해결하기 위해서 시스템상으로 데미지, 체력 등을 스케일을 줄이거나
long long 과 같이 더 큰 사이즈의 형태로 바꾸는 등의 수정이 필요함.

profile
만성피로 개발자

0개의 댓글