원래 목표는 0xfe05를 출력하는 것이었다.
하지만 직접 출력해보니 나오는 결괏값은 0xfffffe05가 나온다...?

원인을 찾아보니 short 타입의 범위와 부호 확장 문제 때문인 것을 알았다.
📌 문제의 원인
0xFE05는 16비트인 short로 자료형을 저장해 놓고 printf( ) 안에는 %x: 정수형 출력을 사용해서 오류가 발생했다.
- 16비트 short 타입은 -32768부터 32767까지의 값을 가질 수 있는데, 0xFE05는 음수 범위에 해당하는 값이므로 short 변수에 저장되면 부호 확장이 발생하여 32비트 시스템(int)에서는 0xFFFFFE05로 변환되어 출력된다.
📌 해결 방법
short 타입의 음수 문제를 해결하려면, unsigned short로 처리하거나 short와 %hx를 사용해야 된다.
1. unsigned short 사용하기
short 대신 unsigned short를 사용하면

출력 결과: 테스트한 결과는 0xfe05이다.
2. short 사용하는 대신 %hx 사용하기
일단 이것을 gpt 에게 검색하기 전에는 %hx라는 것이 존재하는지도 몰랐지만, 찾아보니 알게 되었다.
%x와 %hx의 차이점 데이터의 크기이다.
나는 %x를 사용했기 때문에 자료의 크기가 크게 나온 것 같다.
출력할 때 원하는 자료형(int인지 short인지)에 따라 구분해서 사용하면 될 것 같다
%x | int (4바이트) | 정수를 16진수로 출력 |
%hx | short (2바이트) | short 값을 16진수로 출력 |

반응형
'공부 > c언어 기초' 카테고리의 다른 글
c언어 오류: #define 과 ; (0) | 2025.02.11 |
---|---|
main 함수가 이미 정의되어 있습니다 해결법 (0) | 2025.02.10 |
C언어 예제:data 배열의 짝수 번 요소에 저장된 값을 합산하는 코드를 작성해 보시오. (0) | 2025.02.06 |
2차원 배열 (0) | 2025.02.03 |
자료형 char를 쓰는 경우, 배열의 끝에 0, \0 을 사용하는 이유 (0) | 2025.02.02 |