由于4月份的二级C考试以上机“优秀”、笔试“不及格”的成绩而未能通过考试,于是前天又开始复习。~~嘿嘿,直到现在才真正理解到了什么叫“读书百遍,其义自现”的道理。今天的收获真是不小,虽然不一定能对考试其到帮助作用,但作为学术研究还是十分有价值的,至少我自己是这样认为的。下面进入正题:
1. #include <stdio.h>
2. void main()
3. {
4. double a;
5. int b;
6. a=1.234567890e9;//e9中的9可以改为小于或等于9的数,但不能改为再大于9的数
7. b=(int)(a);
8. printf("%d/n",b); //如果把%d改为%u,还可以把第6行末尾的e9中的9改为更大的数
9. }
测试环境:visual C++ 6.0
这程序的题意是把一个double型数据赋给int型数据.其次,请大家看看程序的第7行,把变量a从double型强制转换为int型.在执行程序的第6行时,a的值已经变成1234567890,是一个完完全全大于32767的数了,并且位数也已经飚升为10位.大家都知道,int型变量的值上限是32767,但为程序执行第7行后,其值并没有被改变呢?double和int是两种完成不同类型的数据,为什么"强制"失效?这叫什么现象?这个问题,值得深究,或者说是值得像我们这种水平的去研究.