왜 int 범위에 있는 −2147483648는 lone타입으로 저장해야되나요?
조회수 3018회
소스코드 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 답변
-
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); }
댓글 입력