printf 使用%f输出整形变量,为什么为0?
来源:互联网 发布:带着空间去民国淘宝 编辑:程序博客网 时间:2024/04/30 12:15
#include <stdio.h>
void main()
{
int i = 65535;
printf("%f",i)
}
1,之所以没输出65535,这是C语言设计的原因。
2,之所以输出0,这是计算机体系结构的问题。
具体原因如下(至今无标准答案)
1、printf函数不进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。int型以补码形式存储在内存中,而浮点型是按照指数形式存储的。
2、浮点数和整数在printf时访问数据的寄存器是不一样的,属于未定义行为,输出结果是随机的;因此如果需要将整形用浮点型格式输出之前需将整形强行转换为浮点型,如下所示:
#include <stdio.h>
void main()
{
int i = 65535;
printf("%f",(float)i)
}
附 printf.c 的源码:
/***
*printf.c - print formatted
*
* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines printf() - print formatted data
*
*******************************************************************************/
#include
#include
#include
#include
#include
#include
#include
/***
*int printf(format, ...) - print formatted data
*
*Purpose:
* Prints formatted data on stdout using the format string to
* format data and getting as many arguments as called for
* Uses temporary buffering to improve efficiency.
* _output does the real work here
*
*Entry:
* char *format - format string to control data format/number of arguments
* followed by list of arguments, number and type controlled by
* format string
*
*Exit:
* returns number of characters printed
*
*Exceptions:
*
*******************************************************************************/
int
__cdecl
printf
(
const
char
*format,
...
)
/*
* stdout ''PRINT'', ''F''ormatted
*/
{
va_list
arglist;
int
buffing;
int
retval;
va_start
(arglist, format);
_ASSERTE(format != NULL);
//断言宏。如果输出格式字符串指针为空,则在DEBUG版下断言,报告错误。
_lock_str2(1, stdout);
buffing = _stbuf(stdout);
//stdout:指定输出到屏幕
retval = _output(stdout,format,arglist);
_ftbuf(buffing, stdout);
_unlock_str2(1, stdout);
return
(retval);
}
0 0
- printf 使用%f输出整形变量,为什么为0?
- 为什么printf("%f\n",5)输出0.000000
- 一个float 变量赋值为3.1 时, 为什么printf 输出的值为3.0999999?
- 不能在printf中使用%lf。为什么printf()用%f 输出double型,而scanf() 却用%lf 呢
- 用printf输出长整形__int64
- printf函数输出变量
- C语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
- 转:C语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
- C语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
- 【转】printf("%f/n",5)的输出结果为什么是0.000000
- 为什么printf()用%f输出double型,而scanf却用%lf呢?
- 为什么printf不能用%lf输出double型,而用%f?
- 为什么printf()用%f输出double型,而scanf却用%lf呢?
- 为什么printf()用%f输出double型,而scanf却用%lf呢
- 为什么printf()用%f输出double型,而scanf却用%lf
- 为什么printf()用%f输出double型,而scanf却用%lf呢?
- printf输出_int64时为0
- C语言outtextxy函数输出整形变量
- 输出1-999中能被3整除,而且至少有一位数字是5的所有数字。
- Matlab 画图修饰-随机线条和随机颜色
- 求3位数水仙花的2种解法
- 在云上搭建大规模实时数据流处理系统
- 文件下载
- printf 使用%f输出整形变量,为什么为0?
- ROS节点与OROCOS组件通信--构建组件
- 链接相关入门
- linux screen
- 工程指令
- 大小端模式详解
- 01 机器学习算法库Mahout mahout概念和支持的算法库
- linux 运行时找不到so文件
- 第288天(30W+4)(29W+6)