作者pracinverse (改)
看板C_and_CPP
標題[問題] 轉型的問題
時間Thu Aug 18 23:52:03 2011
問題如下:
short s1 = 2;
short s2 = 5;
double dResult = s2 / s1;
cout << dResult << endl;
依個人的理解,s2 和 s1 運算的結果會先暫存起來,再assign給 dResult
所以 dResult 印出來會是 2,而不是 2.5
除非在 s2 前面加一個 (double) 將之轉型為double,才會是預期的結果
但是:
s1 = 1000;
s2 = 1000;
int nResult = s1 * s2;
cout << nResult << endl;
在這邊 s1 * s2 運算的結果暫存起來再assign給 nResult,應該會造成溢位
然後 nResult 印出來的結果是錯的(因為沒有先將short轉型成int)
可是 nResult 印出來的結果卻是 1000000,正確的結果
為什麼呢??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.240.232.124
→ akasan:因為他是先轉成 int 再作運算 08/19 00:03
→ akasan:詳細的等版大去翻標準給你看吧XD 08/19 00:04
推 purpose:講好一個雞排45,買三塊只收一百算多招待的,差不多這意思 08/19 00:18
→ james732:樓上害我餓了 〒△〒 08/19 00:20
推 Favonia:一樓正確。然後這叫做 integer promotion 08/20 09:55