C语言问题:浮点数乘以无符号整数结果

这是我看别人在微处理器里看到别人的代码,觉得不对。浮点数乘以整数结果是0吧?!unsignedlongintdepth;depth=100*0.09;printf("%d... 这是我看别人在微处理器里看到别人的代码,觉得不对。浮点数乘以整数结果是0吧?!
unsigned long int depth ;
depth = 100*0.09;
printf("%d\n",depth);
请问这个代码输出是多少
我用VC仿真结果是0
展开
 我来答
成都IO
2015-01-12 · TA获得超过117个赞
知道小有建树答主
回答量:153
采纳率:100%
帮助的人:124万
展开全部

这样写问题也不是很大,可以计算,编译器会按照向上转化计算后在截断处理。所以上面的计算过程:

100*0.09 ==>100.0*0.09;// 转化为浮点型计算

9.00==>depth;//截断处理在赋给整型


int main()
{  
unsigned long int depth ;

float t=0.0f;

depth = t= 100*0.099;

printf("unsigned long int depth = %d,float t = %0.2f\n",depth,t);
}

简单的测试,结果如图:

追问
我测试的结果怎么是0,用的是VC++6.0

追答

哥,你在玩儿我们,你明明说的是 

depth = 100*0.09;// 你测试使用的 depth = 10*0.09
家住海边就爱浪113
2015-11-10 · TA获得超过1.7万个赞
知道小有建树答主
回答量:1664
采纳率:94%
帮助的人:74.8万
展开全部

  浮点数乘以无符号整数结果还是浮点数;

  int main(){

  unsigned long int depth ;

  float  t = 0.0f;

  depth = t = 100*0.099;

  printf("unsigned long int depth = %d, float t = %0.2F\n",depth,t );

  }

  结果如下:


  浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-01-12
展开全部

  这个肯定是 9 ,因为 100 * 0.09 这是个常量表达式,生成的程序时候,编译器早计算出结果了。

也就是说编译器会成诸如下面的指令

mov         dword ptr [depth],9 //这个9生成程序时已经计算出来了


如果你改成如下代码

unsigned long int depth  = 100;//这里初始化
depth *= 0.09; //这里乘法复合
printf("%d\n",depth);

答案 也是9 ,为什么, 因为这个精度FPU是支持的。。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
新人旧酒o
2015-01-12 · TA获得超过290个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:158万
展开全部
9呀 没什么好解释的吧。。。

哦 你问的是微处理器 我不懂这玩意
追问
不是9,我用VC仿真了,是0。
追答
我不懂微处理器 不好意思 删除要分就没删除  我以为只是平常的代码执行环境
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式