• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

4.8강) 예제 오버플로우

22.12.20 23:00 작성 조회수 267

0

안녕하세요.

4.8강 변환 지정자의 수식어들 예제 문제에서 궁금한 점이 있어서 질문드립니다.

해당 코드를 실행하면, %hhd는 최댓값이 255 혹은 127 이기 때문에 오버플로우가 발생한다는 것까지는 이해하였습니다. 근데 콘솔창에 출력값으로 해당 코드 실행 결과가 1로 출력이 되는데, 0으로 출력되어야 하는 것이 아닌가요?

 

1111 1111 에 추가적으로 값이 더해지면서 자릿수를 넘어간 부분을 제외하고 0000 0000이 되기 떄문에 0이 되어야 한다고 생각했습니다.

 

감사합니다.

답변 1

답변을 작성해보세요.

1

강민철님의 프로필

강민철

2022.12.23

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

눈누님의 프로필

눈누

질문자

2022.12.23

감사합니다!