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


소스코드 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); //잘 출력됨
  • 2016년 02월 01일에 작성됨

조회수 276


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);
}
  • 2016년 02월 01일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close