printf 函数问题
来源:互联网 发布:excel vba 连接数据库 编辑:程序博客网 时间:2024/06/08 11:05
int main(){ double n = 1.2; printf("%f\n", n); printf("%lf", n); return 0;}
输出结果如下:
苦思不得其解,转向度娘,寻得些许意见:该问题的出现应该与编译器及C语言标准有关
http://www.cnblogs.com/mayswind/p/3473353.html
printf()函数使用%f格式说明符打印十进制计数法的float和double数字,用%e打印指数计数法的数字。
打印long double类型需要%Lf、%Le、和%La说明符。
注意:float和double类型的输出都使用%f说明符.
一样的问题:
http://www.cnblogs.com/chucklu/p/4021575.html
include <stdio.h>
main()
{
printf("%f\n",5);
}
为什么屏幕输出的结果是0.000000,但是如果是(float)5,结果就正确,请详细说明
用cc编译printf("%f\n",5)为什么是0.000000,而不是5.000000,哪方面的问题,编译器、系统,还是说C语言本身就有这个问题,请详细说明原因
1,之所以没输出5,这是C语言设计的原因。
2,之所以输出0,这是计算机体系结构的问题。
具体来说:
printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。这点就和huhugo88所说一样,5在内存中为00000000,00000101。而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0
之所以Vc中不允许这种情况,而有些编译器就允许这么输出就是编译器设置的问题。按理说,这样访问内存是属于越界访问,应该禁止。不过只是读,伤害性不大而已。
0 0
- printf函数参数问题
- printf 函数问题
- printf函数缓冲区问题
- printf函数缓冲区问题
- printf函数栈的问题
- printf函数的求值顺序问题
- C 语言中的 printf 函数问题
- STM32串口使用Printf()函数问题
- printf函数的参数压栈问题
- printf函数的细节问题探索
- printf函数本身的参数问题
- 关于printf函数的返回值问题
- STM32串口使用Printf()函数问题
- printf()函数的行缓冲问题
- 关于System.out.printf()函数出错问题
- printf函数
- printf()函数
- printf函数
- 翻译经典之《Cisco Lan Switching》第六章 理解生成树(三):生成树协议的两个关键概念
- uva-10815 - Andy's First Dictionary
- 文章标题
- java常用API
- iOS开发-autolayout动画效果实现的几种方法
- printf 函数问题
- Android签名与认证详细分析之一
- windows 内存泄漏检测工具vld相关
- windows上搭建mysql的主从复制测试环境
- 组合数取模
- Android SDK manager 闪退
- 翻译经典之《Cisco Lan Switching》第六章 理解生成树(四):四步比较原则
- HDOJ 2952 Counting Sheep
- Java线程学习笔记----01