Control Engineering/C Programming

오버플로우(Overflow)와 언더플로우(Underflow)

Taesan Kim 2024. 8. 10. 21:07

 

 

본 포스팅은 한동대학교 21학번 과학기술전문사관 후보생 최윤석 선배님의 C언어 교육자료로 제작되었음을 알려드립니다. 감사합니다.

오버플로우(Overflow)와 언더플로우(Underflow)

오버플로우나 언더플로우는 데이터 타입의 범위를 벗어나는 값을 입력했을 때, 의도하지 않은 값이 나오는 현상이다.

이 개념을 이해하기 위해 먼저 C언어의 자료형에 대한 이해가 필요하다.

 

자료형(Data Type)

C언어의 자료형

C언어에서 자료형(Data Type)은 정수형과 실수형으로 구분되며, 정수형은 Signed와 Unsigned로 구분된다.

정수형 char은 1byte, short는 2byte, int는 4byte, long long는 8byte이다. 실수형 float는 4byte, double은 8byte이다.

 

위 그림과 같이 각 자료형마다 할당된 비트수(바이트 수 * 8)의 2의 지수배만큼 범위가 주어진다. Signed는 부호를 결정할 비트가 맨 앞에 하나 할당되고, Unsigned는 부호를 결정하는 비트없이 양수만 존재한다. 

 

정수형 데이터 타입은 이름만 봤을 때, 직관적으로 그 실제 크기가 떠오르지 않는다. C99표준부터, stdint.h를 통해 크기가 명시된 자료형이 추가되었다.

 

만약 자료형에 저장될 수 있는 값의 범위를 넘어간 값이 특정 자료형에 할당되면 어떻게 될까? 예를 들어 255까지만 할당할 수 있는 unsigned char자료형에 256을 할당한다고 생각해보자. 그러면 컴퓨터는 255의 다음수가 없으므로, 처음으로 돌아가 0으로 데이터를 저장할 것이다. 원래 256이었던 숫자가 0으로 저장되는 것이다. 이 현상을 오버플로우라고 한다. 반대로 -1을 할당한다고 하면 255로 저장될 것이다. 이 현상을 언더플로우라고 한다.

 

2024.08.10 - [Engineering/C] - Operator(비트연산자와 삼항연산자)

 

Operator(비트연산자와 삼항연산자)

Operator비트 연산자와 삼항연산자를 살펴볼 것이다. 비트 연산자& : 둘 다 1일 때만 1을 반환, 나머지는 모두 0| : 둘 다 0일 때만 0을 반환, 나머지는 모두 1^ : 둘이 다를 때만 1을 반환, 둘이 같을 때

taesan5435.tistory.com