4.34:根据本节给出的变量定义,说明在下面的表达式中将发生什么样的类型转换:
a) if (fval) b)dval =fval + ival; c) dval + ival * cval;
需要注意每种运算符遵循的是左结合律还是右结合律。
Ans:a) float类型会转换成bool类型;
b)首先ival会转换成float类型,然后再转换成double类型。
c)cval会转换成int类型,然后int类型会转换成double类型。
4.35:假设有如下的定义,
char cval; int ival; unsigned int ui;
float fval; double dval;
请回答在下面的表达式中发生了隐式转换吗?如果有,请指出来。
(a) cval= ' a '+ 3; (b) fval = ui - ival*1.0;
(c) dval = ui * fval; (d) cval=ival + fval +dval;
Ans:a) 发生了隐式转换,赋值运算符的右侧,' a '转换成int类型,然后根据左值的类型,int类型转换成char类型。
b)发生了隐式转换,赋值运算符的右侧,ival转换成了double类型,然后ui会转换成double类型,再根据左值的类型,double类型转换成float类型。
c)发生了隐式转换,赋值运算符的右侧,ui转换成float类型,然后根据左值的类型,float类型转换成double类型。
d)发生了隐式转换,赋值运算符的右侧,首先ival转换成float类型,然后float类型再转换成double类型,根据左值的类型,double类型转换成char类型。