我有两个小问题想问一下

设有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是(2.5)//这串代码应该怎么读取呢
若有定义:char a;int b;float c;double d;则表达式a*b+d-c值的类型为(double)//为什么答案是double,怎么理解

首先数据类型隐式转换规则如下
{char, uchar, short, ushort}->int-> uint->long->ulong->float->double
隐式转换从低精度到高精度,例如 char类型+int类型,得到的结果是int类型的
按照运算优先级

img

img

1、优先级问题:
x+a%3*(int)(x+y)%2/4
首先有括号的我们优先考虑,然后int(x+y)是强制类型转换 int(x+y)=int(7.2)=7
=x+a%37%2/4
再考虑取余
=x+1
1/4
=2.5
注意float型和int相运算时会被转换成float型,建议问者看一下这方面的知识:算术优先级
2.如果int型与float或double型数据进行运算,先把int型和float型转换成double型,然后再进行运算,结果是double型。

第一个式子中由于x+y强制转换为了整形,所以整个式子按整数处理,计算的结果为0,然后0+2.5=2.5.
第二个式子中当数据类型不相同时,编译器为了不损失精度,会默认将数据类型转换为精度更高类型。