작성
·
381
0
안녕하세요.
4.8강 변환 지정자의 수식어들 예제 문제에서 궁금한 점이 있어서 질문드립니다.
해당 코드를 실행하면, %hhd는 최댓값이 255 혹은 127 이기 때문에 오버플로우가 발생한다는 것까지는 이해하였습니다. 근데 콘솔창에 출력값으로 해당 코드 실행 결과가 1로 출력이 되는데, 0으로 출력되어야 하는 것이 아닌가요?
1111 1111 에 추가적으로 값이 더해지면서 자릿수를 넘어간 부분을 제외하고 0000 0000이 되기 떄문에 0이 되어야 한다고 생각했습니다.
감사합니다.
답변 1
1
0 부터 255까지의 표현 범위를 혼동하신 것이 아닌가 싶습니다.
실제로 아래와 같이 256을 출력하면 0이 됩니다.
minchul@~/workspace$ cat test.c
#include <stdio.h>
int main()
{
printf("%hhd %d %d\n", 256, 257, 257);
return 0;
}
minchul@~/workspace$ gcc test.c
test.c:5:25: warning: format specifies type 'char' but the argument has type 'int' [-Wformat]
printf("%hhd %d %d\n", 256, 257, 257);
~~~~ ^~~
%d
1 warning generated.
minchul@~/workspace$ ./a.out
0 257 257
그렇기에 257을 출력하면 1이 되는 것이지요.
감사합니다!