ieee754标准表示下内存的布局

IDE是vs2010下

int main()
{
int i=5;//i二进制=00000000 00000000 00000000 00000101
float f=i;//f二进制=(0)(1000000 1)(0100000 00000000 00000000),由IEEE754标准表float示法而来,
//()内依次为:符号, 阶码, 尾数
int ii=*(int *)&f;//ii二进制=f二进制=(0)(1000000 1)(0100000 00000000 00000000),
//()内依次为:符号, 阶码, 尾数
printf("%d,%d,%d",sizeof(int),sizeof(float),sizeof(int *));//4,4,4
printf("%d\n%d\n%d\n",i,f,ii);//printf后ii=1075052544,对应二进制=(0)(1000000 0001)(0100 00000000 00000000),
//符号, 阶码, 尾数,尾数后补32个0后刚好符号IEEE754标准Double类型

getchar();

}

我的疑问是f和ii在内存的二进制应该一样的才对啊

int i=5;//i二进制=00000000 00000000 00000000 00000101
这就不对,x86处理器是little endian的,应该是 00000101 00000000 00000000 00000000,你自己调试下。

问题出在printf

int main()
{
int i=1;
float f=5;
printf("%d , %f ,%d\n",i,f,i);
printf("%d , %d ,%d ,%d\n",i,f,i,i);
printf("%d , %d ,%d ,%d\n",i,(int)f,i,i);
printf("%d ,%d , %d\n",i,i,f);
system("pause");
return 0;
}

显示如下:
1 ,5.000000 ,1
1 ,0 ,1075052544 ,1
1 ,5 ,1 ,1
1 ,1 ,0

为么第二个i显示不正常,