char 의 %x 출력

junk11의 이미지

char ar[] = "가";

라고 초기화하고

printf("%x\n", ar[0]);
printf("%x\n", ar[1]); 이렇게 출력하면

ffffffb0
ffffffa1 으로 나옵니다

그리고,
char ch = 'a'; 를 %x로 출력하면
16진수 61 이 나오게 되죠

어째서 같은 1바이트인데
2바이트 문자를 한바이트만 출력하면
ffffff 가 붙어서 나오는 걸까요?

초보 공부에 힌트를 부탁합니다

sixmen의 이미지

'가'는 완성형(EUC-KR) 코드로 0xB0A1 이라는 코드를 가지고 있습니다.

char ar[] = '가';

char ar[2] = { 0xB0, 0xA1 };

이라는 거죠. 그래서 a[0]을 찍으면 0xB0, a[1]을 찍으면 0xA1 이 나오고, 0xffffff 가 붙는 건
char로 0xB0, 0xA1은 음수고, printf에 인자로 넘어가면서 int로 확장되면서 0xffffff가 붙는 듯 하네요

(unsigned char)0xB0 = (char)-0x50 = (int)-0x50 = (unsigned int)0xFFFFFFB0

이런 느낌?

unsigned char ar[2] = '가';

이렇게 하면 B0, A1 이 찍히지 않을까 싶습니다.

junk11의 이미지

아 unsigned가 아니라서 사이즈가 늘어난거군요

답변감사합니다

-------------------------
내 악마를 영혼에게 팔아넘기다