C++) 01. 정수형

2021. 2. 8. 14:06C++

728x90

정수는 자연수, 자연수의 음수, 0으로 이루어진 숫자입니다.

 

C++에서 변수를 선언하는 방법은 다음과 같습니다.

1. [타입] [이름];
2. [타입] [이름] = [초기값];

 

정수 타입은 다음과 같습니다.

 

① char형 => 1바이트 (-128 ~ 127)

 

② short형 => 2바이트 (-32,768 ~ 32,787)

 

③ int형 => 4바이트 (-21.4억 ~ 21.4억)

 

④ __int64 => 8바이트 (어마어마하게 큰 숫자)

 

위의 형식들은 모두 앞에 signed가 생략돼있는 형태이고 unsigned를 붙이게 되면 음수는 포함하지 않게 됩니다.

 

계산기를 켜서 직접 확인해보겠습니다.

빨간 박스로 되있는 부분은 1바이트 영역이고 비트를 켜서 최댓값과 최솟값을 확인해보니 (-128 ~ 127)이 맞았다는 걸 알 수 있었습니다.

 

unsigned인 경우도 확인해보겠습니다.

 

1바이트 크기에서 최상위 비트는 음수를 표현하기 때문에 2바이트 크기에서 확인해 본 결과 모든 비트를 켰을때 

최댓값 255가 나오는 것을 알 수 있었습니다.

 


 

그리고 실제 비주얼 스튜디오에서 정수 타입의 변수를 선언해보겠습니다.

 

전역 변수로 int형 변수 a를 선언하고 100으로 값을 초기화해주었습니다.

 

그리고 cout을 이용해 값을 출력해보았습니다.

 

제대로 출력이 되는 것을 확인할 수 있었습니다.

 

그리고 여기서 주의해야 할 점은 각 타입의 범위에 맞게 값을 잘 설정해주어야 한다는 점입니다.

 

위와 같이 short형 변수에 55,555라는 값을 넣어주고 출력해보았습니다. short형의 최댓값은 32,767인데 그보다 큰 값을 넣으면 어떻게 출력되는지 확인해보겠습니다.

 

출력 결과가 -9,981이라는 뜬금없는 숫자가 나온 것을 볼 수 있었습니다. 

 

왜 이런 숫자가 나오는지를 확인해보기 위해 계산기를 켜서 확인해보겠습니다.

 

이단 4바이트 크기에 55,555라는 숫자를 입력해줬습니다. 

 

하지만 short형은 2바이트 크기이기 때문에 다음과 같이 크기를 줄여주게 되면

 

윗줄이 사라지고 최상위 비트가 1로 되면서 음수가 되고 -9,981이라는 숫자가 되는 것을 볼 수 있습니다.

 

이처럼 정수 범위를 초과할 때 나타나는 버그를 정수 오버플로우라고 합니다.

 

반대로 정수 범위보다 작을 때 나타나는 버그는 정수 언더플로우라고 합니다.

 

그럼 이런 버그를 피하기 위해 무조건 __int64만 쓰면 될 텐데 왜 저렇게 여러 종류로 만들었을 까요?

 

그 이유는 여러 가지가 있겠지만 가장 큰 이유는 메모리 관리 때문입니다.

 

만약 온라인게임에서 1만 명의 사람들이 데이터를 주고받을 때 모두 초당 8바이트를 주고받는다고 치면

 

8 * 10,000 = 80,000이지만 그렇게 큰 데이터 크기가 아니어서 short타입으로 2바이트씩 주고받는다면  

 

2 * 10,000 = 20,000으로 6만 바이트를 아낄 수 있습니다.

 

이처럼 사용하는 용도에 따라 적절한 정수 타입을 정해주는 것이 중요합니다.

728x90

'C++' 카테고리의 다른 글

C++) 06. 비트 연산과 비트 플래그  (0) 2021.03.07
C++) 05. 비교, 논리 연산자  (0) 2021.02.17
C++) 04. 산술, 증감 연산자  (0) 2021.02.15
C++) 03. 문자와 문자열  (0) 2021.02.12
C++) 02. 불리언과 실수(부동 소수점)  (0) 2021.02.12