int main()
{
char a = -128;
printf("a=%u",a);
return 0;
}
首先,存储的时候发生截断。
截断之后放到内存当中。
%u的意思是打印无符号整数。
然后,在使用%u或者%d打印的时候,先要整型提升为32bit,再打印。
a本身有符号,整型提升按有符号数提升,高位补符号位。
%u的意思是打印无符号整数。
无符号数类型,不需要讨论原反补。
无符号数的原反补和正数一样,原反补都是一样的。
因此,整型提升后,将提升后的二进制当做无符号数打印。
特别的:在将-128换为128时,可以发现使用%u打印效果是一样的。
可以看到,128进行一系列操作后,二进制和-128是一样的,因此在使用%u打印的时候,结果一样。