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
,并相应地打印其十六进制表示(省略前导零).