[카테고리:] <span>디딤돌 C언어</span>

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

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

디딤돌 C언어