c语言问题:为什么把整数以%f格式输出是0.000?

#include<stdio.h>
void main()
{
printf("%f\n",1073741824);
//为什么输出是0.0000?
}
我知道十进制数 1073741824在内存中以补码形式存储,
补码是:01000000 00000000 00000000 00000000
而当我以%f格式输出1073741824时,应该是把这串代码解释为
+1 *2^1*1.0 =10=2,那么为什么不是2而是0.000,我哪里理解的不对?

1073741824恰好是‭0x40000000‬。如果硬解读为浮点数,那么它的尾数为零,自然对应的数值就是0。
参考:浮点数存储格式
http://blog.chinaunix.net/uid-23204219-id-1761337.html
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-01-26
这串代码本身是错的吧,编译都过不了

c语言问题:为什么把整数以%f格式输出是0.000?
1073741824恰好是‭0x40000000‬。如果硬解读为浮点数,那么它的尾数为零,自然对应的数值就是0。参考:浮点数存储格式 http:\/\/blog.chinaunix.net\/uid-23204219-id-1761337.html

C语言输出的总是0.000,求大神指教。程序如下。
scanf("%f",&f);\/\/double类型的输入不能使用%f进行输入,得用%lf才能正常得到a的值。

关于整数输出为浮点数的问题
printf("%f",(float)a); return 0;} 这是我选择 不加括号里的(float)为何无论a取值多大输出一直为0.0000000呢?我查了下有关资料浮点数是有符号位+指数部分+尾数部分组成。就想到了假如a(int)大到足以把16位都填满了,这时计算机再将a按照浮点数读取时结果不是零。结果还是出乎意料(还是全为零),求大神解释...

C语言,为什么我的答案是0.000?怎么改正确
一、错误 1、从代码输出的z以及z的赋值语句 z=x*j*e\/w+z;来讲,x是什么,j是什么,e是什么,w又是什么。很明显你的意图,j是正负,(!i%2)的时候j是-1,不改变j的值的话j一直会是-1。w你可能想用来做(2i-1)!,可是w=w+w*y;是什么?e是x^(2i-1),这倒是没有问题 于是,...

...平均数的代码哪里有问题,为什么输出的都是0.000 #include<stdio.h>...
试试 include<stdio.h> int main(){ float a,b,c,d;scanf("%f,%f,%f",&a,&b,&c);d=(a+b+c)\/3;printf("average=%.3f\/n",d);return 0;}

新人,关于C语言,怎么第三行开头的数字是0.000
0开头的数字常量代表该数字是以8进制方式表示的,所以每位的最大数字是7,所以会有这样的编译错误

C语言程序找错(二进制数0.101转换为十进制),为什么结果老为0.000
按最小改动的原则修改后的程序:#include<stdio.h>#include<math.h>int main(){int i,n,N,C;double A,B,D,sum;sum=0;scanf("%lf",&A);for(n=1,i=1;n<4;n++,i++){A=A*10;printf("A=%g\\n",A);N=(int)A;B=N%10;D=pow(10,i);B\/=D;sum+=B;}printf("%f",sum)...

C语言条件输出
你再看看题目,答案应该是,m=0.000,n=0.000吧,因为n没有初始化所以就会自动为0.00。应该是少了步 scanf("%f",&n);估计是题目要求你自己加上去的……你的语法中else if(1<=n<4)也不对,改为else if(n>=1&&n<4),这是两个语句要用&&隔开 ...

关于printf输出
1、首先你的输出是0.000这说明 . 后面的数字是代表小数点后保留几位 2、这个也是你输出为零的主要原因,就是你本来是int型 输出时确成了float 这样输出的结果是一定不对的。但是C语言确有一套解决的办法,就是用强制类型转换:printf("%6.3f",(float)d);你把输出那句改成这个,就可以输出5....

C语言 换行
你这个完全没必要转换成double 我这里提供一个思路 你从源文件中读一行数据(建议使用fgets)然后把换行符转换成空格写到目标文件 再从源文件中读一行数据 然后直接写入目标文件 之后一直循环就行了

相似回答