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("%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的是什么意思``解释下啊``
----------------解决方案--------------------------------------------------------
是让我解释么?就是直接的截取啊
----------------解决方案--------------------------------------------------------