Language/C
[따배씨] 3.6 정수의 오버플로우
migrationArc
2021. 5. 10. 13:46
따배씨 - 따라하며 배우는 C언어
3강 데이터와 C 언어
3.6 정수의 오버플로우
#include <stdio.h>
int main()
{
unsigned int i = 0;
printf("%u\n", sizeof(unsigned int)); // 4
printf("%u", sizeof(i)); // 4
return 0;
}
- 출력하려는 데이터가 unsigned int 라서 %u 를 사용하여 출력
#include <stdio.h>
#include <limits.h>
int main()
{
unsigned int i = 0b11111111111111111111111111111111;
// 이진수 입력법, C언어의 표준은 아니지만 대부분의 프로그래머들이 사용하기 때문에 지원
unsigned int u = UINT_MAX;
printf("%u\n", i); // 4294967295
printf("%u\n", u); // 4294967295
printf("%d", i); // -1
return 0;
}
- unsigned int i의 최대값, 2진수 32bit = 0b11111111111111111111111111111111
- limits header를 이용하여 자료값의 최대값 호출 = UNIT_MAX
- %u 가 아닌 %d 로 최대값을 출력시 "-1" 출력으로 오류발생
- signed int 값과 unsigned int 값의 최대값 범위가 다르기 때문
#include <stdio.h>
#include <limits.h>
int main()
{
unsigned int u_max = UINT_MAX;
unsigned int u_min = 0;
signed int i_max = INT_MAX;
signed int i_min = INT_MIN;
printf("max of unit = %u\n", u_max); // 4294967295
printf("max of int = %d\n", i_max); // 2147483647
printf("min of unit = %u\n", u_min); // 0
printf("min of int = %d\n", i_min); // -2147483648
return 0;
}
- unsigned int 의 범위: 0 <= u <= 4294967295(2의 32승)
- signed int 의 범위: -2147483648 (-2의 31승) <= i <= 2147483647 (2의 31승 - 1)
#include <stdio.h>
#include <limits.h>
int main()
{
unsigned int u_max = UINT_MAX+1;
unsigned int u_min = 0 - 1;
printf("max + 1: %u\n", u_max); // 0
printf("min - 1: %u\n", u_min); // 4294967295
return 0;
}
- Overflow 상황 발생
- max + 1 -> 0b11111111111111111111111111111111 + 1
- 32bit를 초과한 숫자인 0b100000000000000000000000000000000 가 됨
- 초과한 자리수인 33bit는 제외되어 남은 수인 0이 됨
- min - 1 -> 0b00000000000000000000000000000000 - 1
- 33bit 자리 수 1이 있다고 가정을 하고 -1 연산 진행
- 그 결과 32bit의 가장 큰 수가 됨
- max + 1 -> 0b11111111111111111111111111111111 + 1
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
실리콘 밸리의 프로그래머 : 네이버 블로그
안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.
blog.naver.com
http://www.inflearn.com/course/following-c
홍정모의 따라하며 배우는 C언어 - 인프런 | 강의
'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원
www.inflearn.com