一个很小疑问,求解答

一个小小的疑问,求解答
这样一个简易测试程序,在VC6下运行:

#include <stdio.h>
int main(void)
{
   char szTmp[5] = "\x9F\x36";
   printf("%x %x\n",szTmp[0],szTmp[1]);
   return 0;
}

得到下边这个运行结果,只是想问,为什么前边会显示6个 f 呢?
一个很小疑问,求解答
十六进制

------解决方案--------------------
符号扩充呗. 0x9F 是一个负数, -97, 
int 里面对应 -97 的数的十六进制就是 ffffff9f
------解决方案--------------------
那就给他屏蔽掉
printf("%x %x\n",szTmp[0]&0xff,szTmp[1]&0xff);

------解决方案--------------------
#include <stdio.h>
int main(void)
{
   char szTmp[5] = "\x9F\x36";
   printf("%x %x\n",szTmp[0],szTmp[1]);
   printf("%x %x\n",(unsigned char)szTmp[0],szTmp[1]);
   return 0;
}
//ffffff9f 36
//9f 36

说明对于你的编译器: char其实是signed char