몽상실현개발주의

[따배씨] 3.6 정수의 오버플로우 본문

Language/C

[따배씨] 3.6 정수의 오버플로우

migrationArc 2021. 5. 10. 13:46

[따배씨] 3.6 정수의 오버플로우

따배씨 - 따라하며 배우는 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의 가장 큰 수가 됨

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

Comments