学C语言遇到不会的了,求帮助
本帖最后由 Anny黄 于 2015-4-21 21:54 编辑刚刚自己试着打了下练习。但是算出来的结果为什么最后个是0,不是1才对吗为什么谁能帮我解答下
y是 float类型,要用%f打印,你却用了%d 仰望天上的光 发表于 2015-3-29 22:52
y是 float类型,要用%f打印,你却用了%d
但是为什么编译器给过,没有提示错误呢! Anny黄 发表于 2015-3-29 23:05
但是为什么编译器给过,没有提示错误呢!
应该是类型自动转换,但能转出个0 来也是想不到的· Anny黄 发表于 2015-3-29 23:05
但是为什么编译器给过,没有提示错误呢!
因为从语法上说,这句是正确的。就好比你见到一个PPMM,对她说:“我要吃掉你。”这句话从语法上完全没有问题,编译器也不会去报错,但执行起来却会得到不可预知的后果。如果你要深究为什么float写%d会得到0的话,这就涉及float类型在内存中的表示(自己baiduIEEE754规范),这个只是已经超出了C语言标准的要求(也就是说C语言标准值要求你知道,这样写会得到不可预知的结果就OK了) haiouda 发表于 2015-3-29 23:10
应该是类型自动转换,但能转出个0 来也是想不到的·
非常谢谢你的帮助! 仰望天上的光 发表于 2015-3-30 21:12
因为从语法上说,这句是正确的。就好比你见到一个PPMM,对她说:“我要吃掉你。”这句话从语法上完全没有 ...
我明白了,感谢帮助 楼上完美解答了 吾王Ein 发表于 2015-4-1 11:02
楼上完美解答了
{:5_90:} {:9_241:} C语言的强大 数据类型自动转换鸟~~ 最后一个 %d 换成 %f 就好鸟~ 我觉得一开始学习就要养成良好的代码书写格式~~{:5_91:} 路过ing…… 同是新人,我前两周也遇到过同样的问题,不过自己翻教材,终于找到了答案。而在谭浩强c语言第四版第七章或者第八章中也提到了这个问题(具体的我也记不清了)。首先,你定义了一个实型变量,但用整型格式打印的时候却出了问题,这个时候很多人就会直接下意识的直接把数据格式改一下,正确输出就万事大吉。但我觉得这样不好,至少也该搞清楚为什么会这样吧。教材上第五十页关于float的定义为三十二个字节,编译系统默认前二十四个字节表示小数部分,后八个字节保存''指数部分,所以实际上在float格式下,1的存储形式应该是0.1*e1,用整型格式打印的时候,默认整数部分为0,理所当然会出现0这个结果咯。其实这些东西书上都有,只需要'仔细思考就行 希望对你有帮助。 943339665 发表于 2015-4-8 11:16
同是新人,我前两周也遇到过同样的问题,不过自己翻教材,终于找到了答案。而在谭浩强c语言第四版第七章或 ...
你说得基本正确,不过printf函数中,所有的float类型都会被自动转换double,也就是说实际上是用64位的IEEE 754 长浮点数来表示float(这也说明了为什么在printf中%f和%lf效果一样,但在scanf中效果却不一样)。我没看过谭浩强的书,不过你说的“1的存储形式应该是0.1*e1”是不对的(或者说仅仅是初步概念上正确,不信你把float的二进制位打印出来看看),C语言中float和double的存储格式唯一的依据是IEEE754浮点数规范。 仰望天上的光 发表于 2015-4-8 19:58
你说得基本正确,不过printf函数中,所有的float类型都会被自动转换double,也就是说实际上是用64位的IEE ...
嗯嗯,我好好研究一下,才接触c没多久,想问题太片面了,谢谢你了
页:
[1]