当前位置: 代码迷 >> C语言 >> printf("%d",3>2?1:1.5); 输出结果为什么是0而不是1呢?
  详细解决方案

printf("%d",3>2?1:1.5); 输出结果为什么是0而不是1呢?

热度:875   发布时间:2008-03-12 17:33:29.0
printf("%d",3>2?1:1.5); 输出结果为什么是0而不是1呢?
printf("%d",3>2?1:1.5);   输出结果为什么是0而不是1呢?

为什么对条件表达式的值的数据类型不能改变呢?

如:
int m=3>2?1:1.5;
printf("%f,%d",3?2?1:1.5,3>2?1:1.5);

运行结果:1.000000,0

以浮点型格式输出结果是1.000000正确,而已整型的格式输出结果不是1而是0呢?
搜索更多相关的解决方案: printf  结果  输出  

----------------解决方案--------------------------------------------------------
printf("%d",3>2?1:(int)2.5);
----------------解决方案--------------------------------------------------------
printf("%f,%f",3>2?1:1.5,3>2?1:1.5);
----------------解决方案--------------------------------------------------------
整数要转换成浮点数后在计算
----------------解决方案--------------------------------------------------------
是啊  为什么是0呢。。
----------------解决方案--------------------------------------------------------
回复 1# 的帖子
具体为什么我也不清楚,但是数据比较时,类型要一致且正确,有些要先转换类型,否则发生什么错误都不好说!
----------------解决方案--------------------------------------------------------
printf("%d\n",3>2?1:2.5);
00401028   push        3FF00000h
0040102D   push        0
0040102F   push        offset string "%d\n" (00423fd8)
00401034   call        printf (00401070)
----------------解决方案--------------------------------------------------------
学c的时候,我们一定听说过一句话
就是c和机器走的比较近。什么意思呢?就是c只支持机器直接支持的东西。
原来机器不支持浮点型,c也就不支持。
所以c里面所有的复制都是原样拷贝。
printf("%d",3>2?1:1.5);由于1.5是浮点型,导致整个式子的结果都是浮点型。
所以,1实际上是以1.0的double/float存储的,用%d,直接截取后面的一半,自然是0。可以试一下下面的式子。(在devc++上是8);
printf("%d",sizeof(3>2?1:1.5))
----------------解决方案--------------------------------------------------------
LS的是什么意思``解释下啊``
----------------解决方案--------------------------------------------------------
是让我解释么?就是直接的截取啊
----------------解决方案--------------------------------------------------------
  相关解决方案