请帮助我理解程序的输出:
int main()
{
char a = 0x99;
printf("%02x\n", a);
return 0;
}
输出:
ffffff99
为什么输出是这样的?
最佳答案
有几个因素在起作用。一方面,在您的计算机上,普通 char
是有符号类型,而不是无符号类型。另一方面,可变参数函数的参数,如 printf()
接受整数提升规则,所以你的 char
转换为 int
,并且因为它已签名,所以 0x99
作为char
是一个负数,所以它被符号扩展为 0xFFFFFF99
, 因此被打印成那样。
要获得您期望的结果,请使用以下方法之一:
printf("%02x", (unsigned char)a);
printf("%02x", a & 0xFF);
关于c - 为什么在这种情况下 char 的输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43603396/