※ 引述《cbkcbk (C')》之銘言:
: float f=3.141592;
: int i=*(int *)&f;
: 不了解*(int *)&f作了什麼
如果是這樣的程式碼,你應該可以理解:
float *fp = &f; /* fp = address of f */
float f2 = *fp; /* f = fp 的 dereference,這時的 f2 = 3.141592 */
那你原本的程式碼,可以這樣看
float *fp = &f; /* fp = address of f */
int *ip = (int *)fp; /* 把 fp 指的地方當作 (int *) */
int i = *ip; /* dereference,把那個記憶體裡的內容,當作 int 來解讀 */
float f = 3.141592;
實際上在記憶體裡面存的是 01000000010010010000111111011000 這樣的東西
(根據 IEEE 754)
而這個東西如果當作整數來看,就是 1078530008 這樣的值,也就是後來的 i
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46