printf函数中类型转换

#include
int main ( )
{
unsigned int a=-1;
printf("%d\n",a); //打印结果和类型转换有关系。
printf("%u\n",a);
printf("%u\n",-1);
return 0;
}
结果:
-1
4294967295
4294967295

#include <stdio.h>
int main ( )
{
    int a=-1;
    printf("%d\n",a);    //打印结果和类型转换有关系。 
    printf("%u\n",a);
    printf("%u\n",-1);
    return 0;
}
结果:
-1
4294967295
4294967295

#include
int main ( )
{
unsigned short a=-1;
printf("%d\n",a); //打印结果和类型转换有关系。
printf("%u\n",a);
printf("%u\n",-1);
return 0;
}
结果:
65535 ????
65535 ????
4294967295

#include
int main ( )
{
short a=-1;
printf("%d\n",a); //打印结果和类型转换有关系。
printf("%u\n",a);
printf("%u\n",-1);
return 0;
}
结果:
-1
4294967295
4294967295

#include
int main ( )
{
double a=-1;
printf("%d\n",a);

printf("%u\n",a);
printf("%d\n",(int)a);

printf("%u\n",(int)a);
printf("%u\n",-1);
return 0;
}
结果:
0 ?????
0 ?????
-1
4294967295
4294967295

请高手分析一下打问号的地方究竟发生了什么类型转换?

实际上没有什么类型转换
unsigned int a=-1;
-1也就是0xffffffff作为常量给了a
你反汇编下就看到了,运行时没有额外的操作。