{
char c = v;
unsigned char uc = v;
unsigned int a = c, b = uc;
int i = c, j = uc;
printf("----------------n");
printf("%%c: %c, %cn", c, uc);
printf("%%X: %X, %Xn", c, uc);
printf("%%u: %u, %un", a, b);
printf("%%d: %d, %dn", i, j);
}
int main(int argc, char *argv[])
{
f(0x80);
f(0x7F);
return 0;
}
结果输出如下:
结果分析:
对于(signed)char来说,0x80用二进制表示为1000 0000,当它作为char赋值给unsigned int或 int 时,系统认为最高位是符号位,会对最高位进行扩展。而0x7F用二进制表示为0111 1111,最高位为0,不会扩展。
对于unsigned char来说,不管最高位是0,还是1,都不会做扩展。