main()
{
char i=255;
printf("\n%x\n",i);
}
Run Code Online (Sandbox Code Playgroud)
输出:ffffffff
main()
{
u_char i=255;
printf("\n%x\n",i);
}
Run Code Online (Sandbox Code Playgroud)
输出:ff
这里发生了什么?请通过一些好的链接向我解释输出.这是我猜的一个非常基本的事情,我真的很困惑......
Oli*_*rth 10
你在这里看到的是两件事:
255不符合范围char(请注意,它是实现定义的,是否char等同于signed char或unsigned char,但显然在您的平台上signed char).结果行为是实现定义的,但通常它将换行并变为-1; 看两个补码.printf()是一个变量参数函数.积分型参数(如char)会自动提升为int.因此,printf()看到int一个值为-1,并相应地打印其十六进制表示.
对于这种unsigned情况,没有环绕. printf()看到int一个值为的值255,并相应地打印其十六进制表示(省略前导零).