#incldue "stdio.h"main(){int a=12;printf("%d",a*0.5);}结果是0 我最开始用的TC 以为是TC的缺陷 后来我用的VC 结果也是这样我把%d改为%f就正确了可这是为什么?说得好的话 其实我是这么理解的 a乘0.5的时候
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 06:57:00
![#incldue](/uploads/image/z/2981142-54-2.jpg?t=%23incldue+%22stdio.h%22main%28%29%7Bint+a%3D12%3Bprintf%28%22%25d%22%2Ca%2A0.5%29%3B%7D%E7%BB%93%E6%9E%9C%E6%98%AF0+%E6%88%91%E6%9C%80%E5%BC%80%E5%A7%8B%E7%94%A8%E7%9A%84TC+%E4%BB%A5%E4%B8%BA%E6%98%AFTC%E7%9A%84%E7%BC%BA%E9%99%B7+%E5%90%8E%E6%9D%A5%E6%88%91%E7%94%A8%E7%9A%84VC+%E7%BB%93%E6%9E%9C%E4%B9%9F%E6%98%AF%E8%BF%99%E6%A0%B7%E6%88%91%E6%8A%8A%25d%E6%94%B9%E4%B8%BA%25f%E5%B0%B1%E6%AD%A3%E7%A1%AE%E4%BA%86%E5%8F%AF%E8%BF%99%E6%98%AF%E4%B8%BA%E4%BB%80%E4%B9%88%3F%E8%AF%B4%E5%BE%97%E5%A5%BD%E7%9A%84%E8%AF%9D+%E5%85%B6%E5%AE%9E%E6%88%91%E6%98%AF%E8%BF%99%E4%B9%88%E7%90%86%E8%A7%A3%E7%9A%84+a%E4%B9%980.5%E7%9A%84%E6%97%B6%E5%80%99)
#incldue "stdio.h"main(){int a=12;printf("%d",a*0.5);}结果是0 我最开始用的TC 以为是TC的缺陷 后来我用的VC 结果也是这样我把%d改为%f就正确了可这是为什么?说得好的话 其实我是这么理解的 a乘0.5的时候
#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 "stdio.h"main(){int a=12;printf("%d",a*0.5);}结果是0 我最开始用的TC 以为是TC的缺陷 后来我用的VC 结果也是这样我把%d改为%f就正确了可这是为什么?说得好的话 其实我是这么理解的 a乘0.5的时候
因为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