#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
char c=-1;
printf("%02x,\n%02x",c,(unsigned char)c);
return 0;
}
输出结果:
ffffff,
ff
如果你能理解,就不用往下看了。
char和unsigned char在调用printf压栈的时候都会向int提升。但是由于char为有符号,所以提升的时候是符号扩展,高位补1,而unsigned char为无符号,提升的时候是0扩展,高位补0。所以前者提升后是0xFFFFFFFF,而后者是0x000000FF,并且0x和后面的0不输出。