我正在学习C. 我想知道为什么你得到一个浮点数,即使你的一个变量是一个int。
float x = 5.0;
int y = 2;
float result = x / y;
我的猜测结果是2.00000。但它确实返回一个浮点数(2.500000)
我认为这将是2.000000,因为如果你划分2个整数就是结果。我认为如果你使用int和float它会选择最不精确的值。
答案 0 :(得分:2)
如果两个操作数都是整数,则运算符/
仅执行整数除法。
答案 1 :(得分:2)
因为C Usual arithmetic conversions
。
引用ANSI C标准§3.2.1.5通常的算术转换:
许多期望算术类型操作数的二元运算符会以类似的方式引起转换并产生结果类型。目的是产生一个通用类型,它也是结果的类型。这种模式称为通常的算术转换:首先,如果任一操作数的类型为long double,则另一个操作数将转换为long double。 [...]否则,如果任一操作数的类型为float,则另一个操作数将转换为float。
强调我的。
答案 2 :(得分:1)
我认为如果你使用int和float它会选择最不精确的值。
恰恰相反;一般规则是在执行任何算术运算之前,两个操作数都被提升为操作中涉及的两个“最强大”类型。
“最强大”的类型是根据标准称为“常用算术转换”(C99,§6.3.1.8)的规则确定的,这基本上就是说
long double
> double
> float
>所有整体类型;如果一个表达式只涉及整数类型,那么其他一些规则就会更加冗长(§6.3.1.1)。
现在,在您的情况下,您有int
和float
,“最佳”类型为float
,因此int
会提升为float
在进行分裂之前。
答案 3 :(得分:0)
如果你的分区中的一个操作数是float
而另一个是整数(int
,long
等),那么你的结果将是浮点数。
这意味着,这将是一个浮点部门:如果你将5除以2,你就会得到预期的2.5。
答案 4 :(得分:0)
首先,result
是一个浮点数,因此它可以包含十进制值。
其次,其中一个操作数x
和y
是一个浮点数,因此返回的值是一个浮点数。这也适用于加法,乘法和减法。
答案 5 :(得分:0)
代码的结果是一个浮点数,因此它会产生一个浮点数。当您通过anf int设置int时,它将返回2.5,但结果为int将结果截断为2