왜 int 범위에 있는 −2147483648는 lone타입으로 저장해야되나요?

조회수 3014회

소스코드 1, 2는 똑같은 내용을 출력하는 건데 코드1처럼 −2147483648을 바로 출력하면 에러가 뜨고 코드2처럼 int형 변수에 저장시켜 놓으면 잘 출력되는데 왜죠?

소스 코드1

printf("PRINTF(d) \t: %d\n", -2147483648);

코드1의 에러 내용(gcc -Werror -Wextra -Wall):

error: format specifies type 'int' but the argument has type 'long' [-Werror,-Wformat] printf("PRINTF(d) \t: %d\n", -2147483648); ~~ ~~~~~~~~~~ %ld

소스 코드2

int i;

i = -2147483648;
printf("%d", i); //잘 출력됨

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    C에서 2147483648가 상수 정수이고, -2147483648는 2147483648에 단항 연산자 -를 적용 시킨 것이기 때문에 상수 리터럴이 아닙니다.

    2147483648는 int에 들어가기에는 너무 큰 숫자기 때문에 상수 정수 2147483648는 long으로 인식해 코드 1처럼 바로 쓸 경우는 에러가 출력됩니다.

    본인의 컴퓨터에서 int에 맞는 최솟값을 알아보려면 <limits.h>INT_MIN 매크로를 써 보세요.

    #include <limits.h>
    
    int main(int argc, const char * argv[]) {
        printf("%d", INT_MIN);
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)