Re: [問題] from float* to int*
※ 引述《Dreamer77 (追夢)》之銘言:
: http://codepad.org/Ss7J6WVc
: 搞不懂問題出在哪
: 因為sizeof(float) == size(int)
: 是不能這樣轉是嗎?
: 程式本身可能沒什麼意義 只是好奇XD
: THX
→
10/27 11:54,
10/27 11:54
其實關鍵就是這個
就像你知道的,float是個32位元長度的資料型態
在 float s = 1.3f; 之後
s 那塊記憶體其實長得像 00111111101001100110011001100110 這樣
至於為什麼,可以參考:http://zh.wikipedia.org/zh/IEEE_754
另外這個網址可以轉換:http://www.h-schmidt.net/FloatApplet/IEEE754.html
接下來這兩行
float* fp = &s;
printf("%d\n", *(int*)fp);
白話的講,就是:
把 00111111101001100110011001100110 用 int 來看
也就是用二進位的角度去看它,得到的數值就是 1067869798 了
可用這個網址換算:http://mistupid.com/computers/binaryconv.htm
float s = 1.3f;
float* fp = &s;
printf("%d\n", *(int*)fp);
這三行如果不容易閱讀,就把它寫成這樣:
float s = 1.3f;
float* fp = &s;
int* tmp1 = (int *)fp;
int tmp2 = *tmp;
printf("%d\n", tmp2);
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
→
10/27 19:47, , 1F
10/27 19:47, 1F
推
10/27 19:52, , 2F
10/27 19:52, 2F
推
10/27 19:59, , 3F
10/27 19:59, 3F
→
10/27 20:01, , 4F
10/27 20:01, 4F
推
10/27 20:03, , 5F
10/27 20:03, 5F
推
10/27 20:04, , 6F
10/27 20:04, 6F
→
10/27 20:04, , 7F
10/27 20:04, 7F
→
10/27 20:04, , 8F
10/27 20:04, 8F
推
10/27 20:18, , 9F
10/27 20:18, 9F
推
10/27 20:28, , 10F
10/27 20:28, 10F
→
10/27 21:22, , 11F
10/27 21:22, 11F
推
10/27 22:17, , 12F
10/27 22:17, 12F
推
10/27 22:23, , 13F
10/27 22:23, 13F
→
10/27 22:36, , 14F
10/27 22:36, 14F
→
10/27 22:39, , 15F
10/27 22:39, 15F
→
10/27 22:40, , 16F
10/27 22:40, 16F
推
10/27 22:45, , 17F
10/27 22:45, 17F
推
10/27 22:51, , 18F
10/27 22:51, 18F
推
10/27 22:52, , 19F
10/27 22:52, 19F
→
10/27 22:52, , 20F
10/27 22:52, 20F