[問題] float (加減乘除) int 問題

作者: SuperMaster (神手)   2014-04-20 15:36:06
小弟我再進行C++測試時遇到一點小問題
[問題1:Type checking概念]
測試1:
int a 10 ;
float b = 2.5 ;
b = a + b ;
printf( "%f", b ) ;
印出值為:12.5 << 因為會發生型別轉換
測試2:
int a = 10 ;
float b = 2.5 ;
b = a / 3 ;
printf( "%f", b ) ;
印出值為:3 << 沒有轉換 應該要是3.33333
需要改成b = (float)a / 3 才能印出正確的值
為什麼測試1的不需要就能印出正確的值??????
作者: BSpowerx (B.S)   2014-04-20 15:37:00
因為a和3型態都是int,兩個int運算自然只會回傳int值
作者: CaptainH (Cannon)   2014-04-20 15:44:00
問題2: (1) heap可以分配較大的陣列, 例如把50改成500萬stack 通常會爆炸, heap 不會. (2) 當陣列大小是執行時才確定時, 只能用 new[](3) new 出來的需要 delete
作者: diabloevagto (wi)   2014-04-20 16:00:00
把測試2的3改成3.0即可,這樣就跟測試1的環境一樣了
作者: Hurricaneger (褲襪脫落大尉)   2014-04-20 23:47:00
測試1,我覺得不太是型別轉換,你指定b=a+b,就是a+b值再指定給b 而已啊測試2,float b;跟你下一行 b =a/3也沒什麼關係,你設 float a =10;float b=0;b=a/3這樣就是你要的答案了吧!
作者: diabloevagto (wi)   2014-04-21 01:59:00
看不太懂樓上的意思
作者: Hurricaneger (褲襪脫落大尉)   2014-04-21 13:08:00
不要怕,我也是新手,推推自己的想法而已,喵喵
作者: lc85301 (pomelocandy)   2014-04-22 10:50:00
compiler在處理運算子時會檢查兩邊的型別,不一致的話會會加上型別轉換,就是這樣在C裡面+就是+,cpp 才有operator overloading的概念

Links booklink

Contact Us: admin [ a t ] ucptt.com