看板 C_and_CPP 關於我們 聯絡資訊
好奇做了實驗,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; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.46.193.235 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1510419444.A.5B1.html ※ 編輯: wei115 (114.46.193.235), 11/12/2017 00:58:35
youchenliu: little-endian 11/12 01:41
chuegou: 一樓正解 前幾篇推文也有 11/12 01:46
alan23273850: 推有實驗精神 11/12 02:19
remember: 現在一般情況下也不容易找得到big-endian 的機器惹 QQ 11/12 19:51
Hazukashiine: little endian 某種程度上來說是比較好的 11/12 19:53
Hazukashiine: 至少不同長度的值在定址上是一致的 不需要偏移量 11/12 19:54
alan23273850: 再推樓上解說,以前老師從沒提過little endian的優 11/12 20:30
alan23273850: 點,我以前常覺得數字順序跟位址順序相反有點惱人, 11/12 20:31
alan23273850: 現在終於懂了 11/12 20:31
rice9547: 學到了,謝謝! 11/14 12:12
stupid0319: big-endian常用在網路傳輸 11/14 14:24