好奇做了实验,float 和 int 的位元数都是32bit,所以转换资料型态(指标)后printf
的值应该会是一样,结果也是如此,但后来想说:如果用4个 char 的阵列,转型为
float的指标(和int的指标)后答案应该和前面两个值一样,但最后出来的值却天差地远
想想或许开始的地方才是最低位,所以我把存入 char 的值颠倒放,结果还是错的,再
想想,根据我薄弱的组合语言观念,认为应该是X86的设计是高位存高,低位存低,所以
我保持每一个 char 的顺序,但是将他颠倒放,结果就正确了
我的推论是正确的吗?如果正确,是否表示这样的方式在不同CPU架构下得出的解答不同?
程式码如下
https://ideone.com/jRauO1
#include<stdio.h>
int main()
{
float fvar = 1001.1;
int *pivar = (int *)(&fvar);
printf("i = %d f = %f\n", *pivar, fvar);
int ivar = 1148864102;
float *pfvar = (float *)(&ivar);
printf("i = %d f = %f\n", ivar, *pfvar);
//1148864102 = 0x447A4666
//char cvar[4] = {0x44, 0x7A, 0x46, 0x66};
char cvar[4] = {0x66, 0x46, 0x7A, 0x44};
int *ctoi = (int *)cvar;
float *ctof = (float *)cvar;
printf("i = %d f = %f\n", *ctoi, *ctof);
return 0;
}