인프런 커뮤니티 질문&답변

눈누님의 프로필 이미지
눈누

작성한 질문수

홍정모의 따라하며 배우는 C언어

4.8강) 예제 오버플로우

작성

·

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이 되는 것이지요.

눈누님의 프로필 이미지
눈누
질문자

감사합니다!

눈누님의 프로필 이미지
눈누

작성한 질문수

질문하기