作业帮 > 综合 > 作业

#incldue "stdio.h"

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/30 16:19:54
#incldue "stdio.h"
main()
{int a=12;
printf("%d",a*0.5);
}
结果是0 我最开始用的TC 以为是TC的缺陷 后来我用的VC 结果也是这样
我把%d改为%f就正确了
可这是为什么?
说得好的话
其实我是这么理解的 a乘0.5的时候 a先转换为浮点型12.0 然后再将12.0*0.5的结果转换整型
这样就应该是6啊!
我的理解哪里出错了?
#incldue
因为a*0.5的结果是浮点数(%f),而你设置为显示整数(%d),所以结果为0
printf()函数的调用格式为:
printf("",);
参考:
%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x,%X 无符号以十六进制表示的整数
%o 无符号以八进制表示的整数
%g 自动选择合适的表示法
//---------------------
printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式).
C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存.这点就和huhugo88所说一样,5在内存中为00000000,00000101.而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0