san*_*101 2 c division integer-division
当我遇到以下问题时,我在C中编写此代码.
#include <stdio.h>
int main()
{
int i=2;
int j=3;
int k,l;
float a,b;
k=i/j*j;
l=j/i*i;
a=i/j*j;
b=j/i*i;
printf("%d %d %f %f\n",k,l,a,b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么代码为第一个和第三个变量(k
和a
)返回零?
我认为你正在经历的是整数运算.你正确地假设l
并且b
是2,但错误地认为k
并且a
将是3,因为它是相同的操作.但事实并非如此,它是整数运算(而不是浮点运算).所以当你这样做时i / j
(请考虑使用一些空格),2/3 = 0.33333 ... 被投射到aint
并因此变为0.然后我们再次乘以3,并且0*3 = 0.
如果你改变i
并j
成为float
s(或者用(float)
演员表示你的数学胡椒),这将做你期望的.
你还没有说出你得到的或你期望的东西,但在这种情况下,它可能很容易猜到.当你做'a = i/j*j'时,你期望结果大致为.2222(即2/9),但你得到0.0.这是因为i和j都是int,所以乘法和(关键)除法是在整数数学中完成的,产生0.你将结果赋值给float,然后将0转换为0.0f.
要解决此问题,请在除法之前将至少一个操作数转换为浮点数: a = (float)i/j*j);
归档时间: |
|
查看次数: |
664 次 |
最近记录: |