17. 정수 형식의 표현 범위

C언어 정수 형식의 표현 범위와 Overflow 값 현상

char 형식과 unsigned char 형식은 정수를 표현할 때도 사용할 수 있다고 했어요.
두 가지 형식 모두 1바이트를 할당하여 256가지의 정수를 표현할 수 있답니다.

unsigned char 형식은 부호 없는 정수만 표현하므로 0~0xFF(0~255)까지 표현 가능해요.

char 형식은 최상위 비트가 0인 0x00~0x7F(0~127)까지는 부호없는 정수예요.
그리고 최상위 비트가 1인 0x80~0xFF(-128~-1)까지는 부호있는 정수죠.

◈ char 형식과 unsigned char 형식의 표현 범위 확인

#include <stdio.h>
int main()
{
    char c = 0;
    unsigned char uc = 0;    
    c = 0x7F; //최상위 비트가 0
    uc = 0x7F;    
    printf("%d %d\n",c,uc);
    c = 0x80; //최상위 비트가 1
    uc = 0x80;
    printf("%d %d\n",c,uc);
    c = 0xFF;
    uc=0xFF;
    printf("%d %d\n",c,uc);
    return 0;
}

◈ 실행 결과

127 127
-128 128
-1 255

다음은 부호 있는 정수를 표현하는 char, short, int, long 형식으로 표현할 수 있는 최대값과 최소값을 확인하는 코드예요.

◈ 부호 있는 정수 형식의 최솟값과 최댓값

#include <stdio.h>
int main()
{
    char c = 0x7F;
    short s = 0x7FFF;
    int i = 0x7FFFFFFF;
    long l = 0x7FFFFFFF;
    long long ll = 0x7FFFFFFFFFFFFFFFLL;
    
    printf("char max:%d ",c); 
    c = 0x80;
    printf("char min:%d \n",c); 
 
    printf("short max:%d ",s); 
    s = 0x8000;
    printf("short min:%d \n",s); 
 
    printf("int max:%d ",i); 
    i = 0x80000000;
    printf("int min:%d \n",i); 
 
    printf("long max:%d ",l); 
    l = 0x80000000;
    printf("long min:%d \n",l);    
 
    printf("long long max:%lld ",ll); 
    ll = 0x8000000000000000;
    printf("long long min:%lld \n",ll); 
    return 0;
}

◈ 실행 결과

char max:127 char min:-128 
short max:32767 short min:-32768 
int max:2147483647 int min:-2147483648 
long max:2147483647 long min:-2147483648
long long max: 9223372036854775807 long long min: -9223372036854775808

여기서 잠깐!
설마 눈으로만 보고 머리로 이해할 수 있다고 개발 도구에서 직접 확인하지 않는 것은 아니죠?
프로그램 언어는 개발 도구를 통해 몸으로 익혀야 합니다.
코드를 보면서 작성해도 오타가 나오거든요.
오류를 확인하면서 문제를 해결하는 것을 익히는 것은 매우 중요해요.