printf("%d",a);
-1本来是整型,占4个字节,但是char只占1个字节,所以
-1的补码本来是:32个1
现在是:11111111
对于char a=-1来说,输出的还是-1,
但是unsigned char a=-1来说,输出%d是整型,就要进行整型提升,
在前面补充符号位,又因为unsigned 没有符号位,所以补充0,
就变成了24个0+8个1
就输出255;
如果是这样
char a=-1;
printf("%u",a);
补码:11111111
%u整型提升,在前面补充符号位
就变成了32个1;
输出4294967295。
文章讨论了在C语言中,当char类型变量被赋值为-1时,使用printf函数以%d和%u格式输出的区别。对于signedchar,输出%d保持其原始的-1值,而unsignedchar在%d输出时会进行整型提升,补0并产生255。使用%u格式时,无论char是否带符号,都会先转换为无符号整型,导致输出4294967295。
726





