指派运算符 的相关问题
#include<stdio.h>
int main(void)
{
int c;
c = 1.6 + 1.7;
printf("first is %f\n",(float)c);
c = 1.6 +1.7;
printf("end is %d\n",(int)c);
return 0;
}
结果
first is 3.000000
end is 3
第一个结果中, 我指定了 C 的类型为 float。 原来的 int 与此冲突?
否则怎么出现个 3.000000?
求解~~
(书上没有介绍此用法)
原来的用法是这样。 【【【【【【【【【【【【【【
#include<stdio.h>
int main(void)
{
int c;
c = 1.6 + 1.7;
printf("first is %d\n",c);
c =(int) 1.6 +(int)1.7;
printf("end is %d\n",c);
return 0;
}
将 1.6 和1.7 指派为 int 类型。 从而截尾,即 c = 1 + 1;
[解决办法]
c = 1.6 + 1.7; //
上面一行右边先运算,得到3.3(大致)的浮点数结果,在赋值给左边的整型变量是,后面的小数被切掉,c得到了3。只知道3,你原来是从3.0001还是3.99999还是3LL赋值给它的都成了无关紧要的历史。c管不了,编译器也不会帮你记住...
printf("first is %f\n",(float)c);
上面你从整型cast成浮点数,它里面的值(3)被赋给新生的无名变量,并被压入堆栈,printf函数在运行中会根据前面格式船中的%f找它并正确的使用,打印出3.0。 前面的3.3, 正如我们讨论过的一样,永远成为没有现实影响的历史。
c = 1.6 +1.7;
printf("end is %d\n",(int)c);
从int cast到int,没有必要但也不算错,得到3的打印结果,名实相符,皆大欢喜。如果不这样这满版的人就要哭了。