#include <stdio.h>
int main(void)
{
char a = -1;
unsigned char b = -1;
printf("%u\n", a);
printf("%u\n", b);
}
无论是不是unsigned,内存中存储的char类型的值都是一样的,都是0xFF。
printf("%u") 输出时,对char类型的变量会类型提升为int型。
因为 char 是带符号数字类型,所以会进行符号拓展。a 从 0xFF 拓展为 0xFFFFFFFF (4294967295)。
unsigned char 则会进行零拓展,b 从 0xFF 拓展为 0x000000FF (255)。