您好我想问一个表达式的结果,
int x = 7;
double y = 2;
当(x / y + 2)时类型是什么?
是double,long,int,string还是byte? 感谢
答案 0 :(得分:4)
这是一个double
。当您的表达式包含混合类型时,可以使用算术转换规则:
x
在double
的评估中转换为x / y
,并且在添加到该字词时,2会转换为double
。
请注意,无论平台上int
(和double
)的范围如何,都是如此。
答案 1 :(得分:2)
返回double
类型。
在(x / y + 2)
首先x/y
执行,此处变量x
属于int
类型且y
属于double
类型,所以你是在两种不同类型之间执行除法运算符,因此算术类型会话发生,即临时int
被转换或提升为double
,即x/y
double
收益类型。
下一个(x/y)(double)
+ 2 (int)
再次产生double
。
答案 2 :(得分:0)
表达式的结果类型为double
。详情见C standard的第6.3.1.8节详细介绍了常用算术转换:
首先,如果任一操作数的相应实数类型为
long double
,则另一个操作数将在不更改类型域的情况下转换为对应实数类型为long double
的类型。否则,如果任一操作数的对应实数类型为
double
,则另一个操作数将在不更改类型域的情况下转换为对应实数类型为double
的类型。< /强>否则,如果任一操作数的相应实数类型为
float
,则另一个操作数将在不更改类型域的情况下转换为对应实数类型为float
的类型。否则,将对两个操作数执行整数提升。
以粗体显示的段落表示如果一个操作数是double
而另一个操作数是整数类型,则两个操作数都将具有类型double
。你的表达就是这种情况。
由于x
的类型为double
且y
的类型为int
,因此y
的值将转换为double
并且表达式为完整x / y
的类型为double
。从那里,x / y
的类型为double,2
的类型为int
,值2
已转换为double
,因此x / y + 2
的类型为double
{1}}。