好奇做了實驗,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;
}