繁体   English   中英

为什么cout的输出<< 7/9 * 9; 是零?

[英]Why is the output of cout << 7/9*9; is zero?

为什么以下代码的输出等于0或serven?

cout << 7/9*9;   //output 0 (zero)   why?

float nine = 9;
float seven = 7;
float i = seven/nine*nine;
cout << i     //output 7   Why?

谢谢您的帮助。

7/9 * 9将这些数字评估为整数,因此7/9的计算结果为0,0 * 9 = 0。

当你使它们浮动时,你正在执行预期的计算。

尝试7.0 / 9 * 9得到7,然后你将进行浮点运算。

在C中,当您对整数进行除法时,其余部分将被丢弃。 在这里,你正在做7/9,然后取结果并乘以9.在步骤中,接下来是C的想法:

7 / 9 = 0
0 * 9 = 0

使用浮动时,它可以正常工作,因为其余部分不再被丢弃。

在:

cout << 7 / 9 * 9;

你正在做整数运算。 所以7/9是0而0 * 9是0。

要使用浮点运算(这是您在第二个示例中使用的),您要执行以下操作:

cout << 7.0 / 9 * 9;

7/9*9的equals (7 / 9) * 9 ,但作为79是整数,并且不浮点数, 7 / 9等于0(除法的商)。

我认为这是一个精确的问题。 /和*运算符的优先级相同,因此7/9 * 9从左到右依次为(7/9)* 9。 问题是(7/9)在整数运算中为0。 当你明确地将它们存储为浮点数时,/操作是以浮点形式完成的,它可以以比int更高的精度存储7/9。

如果要在没有精度问题的情况下在一行中进行计算,请尝试:

cout << 7.0f / 9.0f * 9.0f;

许多正确的答案已经。 附加说明:如果要将其保留为整数运算而不使用浮点,则需要对其进行排序,以便在除数之前进行乘法以获得最高精度(只要在乘法过程中不发生溢出。比(7.0/9)*9将转换为浮点数,你可以做(9*7)/9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM