C 为什么浮点除以整数返回浮点
我在学C。 我想知道为什么会有一个浮点,即使其中一个变量是intC 为什么浮点除以整数返回浮点,c,C,我在学C。 我想知道为什么会有一个浮点,即使其中一个变量是int float x = 5.0; int y = 2; float result = x / y; 我猜结果是20万。但它确实返回一个浮动(2.500000) 我想应该是2.000000,因为如果你除以2整数,这就是结果。我认为如果你使用int和float,它会选择最不精确的值 运算符/仅当两个操作数都是整数时才执行整数除法。如果除法中的一个操作数是浮点数,另一个是整数(int,long等),则结果将是浮点 这意味着,这将是一个浮
float x = 5.0;
int y = 2;
float result = x / y;
我猜结果是20万。但它确实返回一个浮动(2.500000)
我想应该是2.000000,因为如果你除以2整数,这就是结果。我认为如果你使用int和float,它会选择最不精确的值 运算符
/
仅当两个操作数都是整数时才执行整数除法。如果除法中的一个操作数是浮点数,另一个是整数(int
,long
等),则结果将是浮点
这意味着,这将是一个浮点除法:如果你将5除以2,你会得到预期的2.5。首先,result
是一个浮点,因此它可以保存十进制值
其次,其中一个操作数x
和y
是浮点,因此返回值是浮点。这也适用于加法、乘法和减法 因为C的通常的算术转换
引用ANSI C标准§3.2.1.5常用算术转换:
许多期望算术类型的操作数的二进制运算符会导致转换,并以类似的方式生成结果类型。目的是生成一个公共类型,它也是结果的类型。这种模式称为通常的算术转换:首先,如果任一操作数的类型为long double,则另一个操作数将转换为long double。[…]否则,如果任一操作数的类型为float,则另一个操作数将转换为float。
我的
我认为如果你使用int和float,它会选择最不精确的值
恰恰相反;一般规则是,在执行任何算术运算之前,两个操作数都会升级为运算中涉及的两个操作数中的“最强大”类型
“最强大的”类型是根据标准称之为“常用算术转换”(C99,§6.3.1.8)的规则确定的,该规则基本上是这样说的
long-double
double
float
>所有整数类型;如果一个表达式只涉及整数类型,则会引入一些更冗长的规则(见§6.3.1.1)
现在,在您的例子中,您有一个int
和一个float
,“最佳”类型是float
,因此在执行除法之前,int
被提升为float
。代码的结果是一个float,因此它将产生一个float。当按anf int对int进行偏差时,它将返回2.5,但作为int的结果会将结果截断为2这是因为其中一个操作数是浮点。这足以使操作成为浮点。1)因为一个操作数是浮点。2) 因为您已经编写了float result
-为什么您希望它是其他的呢?这里的负号在哪里起作用?;)为什么您会猜测或期望除法的结果是2.00000
?请注意,表达式的计算结果是某物,而不是返回某物。任何合理的原因都会使您认为强制使用范围较小(不一定精度较低)的类型更符合逻辑?你知道有哪种编程语言的行为是这样的吗?也许是“最强大的”->“范围更广的类型”?