[问题] 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