这个为什么输出是3.5

来源:百度知道 编辑:UC知道 时间:2024/09/20 23:20:19
x=2.5;a=8;y=4.7;
k1=x+a%3*(int)(x+y)%8/4;
float x,y,k1,k2;
int a,b,t,t1;

你留意运算时的数据类型变化
a为int
所a%3结果也为int类型,这里8%3结果为2
因为(int)(x+y)强制转换为int,其结果也是int类型,这里为7
那么上面的2*7=14,当然是int类型
14%8,结果当然也是int类型,14%8=6
6/4的结果也是int类型,虽然数学上6/4是等于1.5,但是由于是int类型的数据,小数点后面被去掉,所以,在C语言中,6/4是等于1的,如果6.0/4那么就是1.5
最后,X+1,当然是3.5

最后的最后,为了防止对上面的不理解,补充,在C语言中,是存在一个数据转化规则的,下级的数据与上级数据运算时,会自动将下级数据类型转换为上级的数据类型,同级的则不转换

变量的类型?
a%3=2;
(int)(2.5+4.7) = (int)7.2 = 7;
2*7 = 14;
14%8=6;
6/4=1;
2.5+1=3.5

我们一步一步来分析.得看你x是定义什么类型了。如果x为int型结果为3.000000如果x为float结果为3.500000.
8%3=2
(int)x+y=7
2*7%8=1
1/4=1
我想应该是这样的吧。。如果有不对的地方还请指出。

1. (x+y)=7.2
float+float=float

2. (int)(x+y)=7
(int)float=int
3.a%3=2
% 运算符两边强制(int) (int)%(int)=int
4.2*7=14
int*int=int
5.14%8=6
% 运算符两边强制(int) (int)%(int)=int
6.6/4=1
(int/int=int)
7.2.5+1=3.5
float+int=float+(float)int=float

首先计算括号里的,括号是用来提高优先级!float x,y被int强制变换为整型数,所以x+y=7,再算a%3=2,