社区
C语言
帖子详情
30/20输出居然是0.000000
freefei
2010-12-16 09:50:43
#include "stdafx.h"
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
float f=30/20;
printf("%f",sizeof(f));
getchar();
return 0;
}
...全文
216
21
打赏
收藏
30/20输出居然是0.000000
#include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { float f=30/20; printf("%f",sizeof(f)); getchar(); return 0; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qwqs1314
2010-12-16
打赏
举报
回复
数据类型包括
整型:int,short,long.
实型:float,double.
字符:char.
上述数据类型进行混合运算是合法的。进行运算是,系统会自动进行类型转换。下面介绍:
1,必须转换:char,short一定先转换为int;
float一定先转换为double(双精度)。
2,根据情况选择转换:由于混合运算计算的时候是有顺序的,根据+,-,*,、()的优先级进行运算,所以进行运算的两个操作数,例如int ,double.就会转换为double.
操作数的类型的级别是int, unsigned, long ,double.从低到高。
进行运算的时候,会自动转换为高级别的类型数据。
你的30/20结果就是int型的了
f 接受浮点或者双精度值并将它转换为十进制符号表示法,格式为 [-] ddd.ddd。基数字符(在这里显示为十进制点)后的数字位数等于规定的精度。 如果不指定精度,则输出六个数字。如果精度是 0(零),将不显示基数字符。
你用printf(%f,5)也是输出0.0000的
参考:printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。这点就和huhugo88所说一样,5在内存中为00000000,00000101。而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0
qwqs1314
2010-12-16
打赏
举报
回复
数据类型包括
整型:int,short,long.
实型:float,double.
字符:char.
上述数据类型进行混合运算是合法的。进行运算是,系统会自动进行类型转换。下面介绍:
1,必须转换:char,short一定先转换为int;
float一定先转换为double(双精度)。
2,根据情况选择转换:由于混合运算计算的时候是有顺序的,根据+,-,*,、()的优先级进行运算,所以进行运算的两个操作数,例如int ,double.就会转换为double.
操作数的类型的级别是int, unsigned, long ,double.从低到高。
进行运算的时候,会自动转换为高级别的类型数据。
你的30/20结果就是int型的了
f 接受浮点或者双精度值并将它转换为十进制符号表示法,格式为 [-] ddd.ddd。基数字符(在这里显示为十进制点)后的数字位数等于规定的精度。 如果不指定精度,则输出六个数字。如果精度是 0(零),将不显示基数字符。
你用printf(%f,5)也是输出0.0000的
参考:printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。这点就和huhugo88所说一样,5在内存中为00000000,00000101。而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0
cuihuijuan99
2010-12-16
打赏
举报
回复
printf("%d\n",sizeof(f));
printf("%f",f);
输出结果为4
1.00000
zhanghuayi_xiyou
2010-12-16
打赏
举报
回复
30/20 = 1,int/int = int
freefei
2010-12-16
打赏
举报
回复
谢谢了各位,解决了我的疑惑
pengzhixi
2010-12-16
打赏
举报
回复
printf("%f",sizeof(f));
你这个和
printf("%f",10/3);是一样的道理
yuyan_linger
2010-12-16
打赏
举报
回复
printf只会根据内存中的数据解释成对应的参数类型
整数和浮点数在内存中的布局完全不一样 当然不能解释出你要的数据来啦
你可以看看浮点数每个字节都是啥
cout会根据类型自动输出数据
freefei
2010-12-16
打赏
举报
回复
谢谢各位的回答,对我有帮助。我看了他的汇编有些指令看不懂。。。
c是不会将int自动转化为float的是吗
AlanBruce
2010-12-16
打赏
举报
回复
之所以整形显示不出来,是因为float类型存储格式与整形不一样
dieyingao
2010-12-16
打赏
举报
回复
你将 1 当符点数输出了- -
就想叫yoko
2010-12-16
打赏
举报
回复
+1[Quote=引用 7 楼 xy_zhang 的回复:]
printf("%f",(float)30/20);
这样呢
[/Quote]
freefei
2010-12-16
打赏
举报
回复
[Quote=引用 7 楼 xy_zhang 的回复:]
printf("%f",(float)30/20);
这样呢
[/Quote]
这样可以
無_1024
2010-12-16
打赏
举报
回复
强制类型转换
lhy
2010-12-16
打赏
举报
回复
[Quote=引用 5 楼 liubaofeng28 的回复:]
#include "stdafx.h"
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
printf("%f",30/20);
getchar();
return 0;
}
输出0.000000
[/Quote]
30/20是整数呀,应该是30.0/20.0
xy_zhang
2010-12-16
打赏
举报
回复
printf("%f",(float)30/20);
这样呢
freefei
2010-12-16
打赏
举报
回复
[Quote=引用 4 楼 xy_zhang 的回复:]
printf("%f",sizeof(f)); <-- 改成%d
[/Quote]
改成%d可以但是为什么,我想问的是
freefei
2010-12-16
打赏
举报
回复
#include "stdafx.h"
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
printf("%f",30/20);
getchar();
return 0;
}
输出0.000000
xy_zhang
2010-12-16
打赏
举报
回复
printf("%f",sizeof(f)); <-- 改成%d
freefei
2010-12-16
打赏
举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
你输出的是sizeof(f) ,不是f的值啊
[/Quote]
是我题目写错了,现在显示0.00000
你把sizeof去掉还是0.00000
bdmh
2010-12-16
打赏
举报
回复
你输出的是sizeof(f) ,不是f的值啊
加载更多回复(1)
c语言
输出
0.000000
或乱码,深究
0.引例 刚刚看到一篇帖子,发现我刚学编程时也遇到过,后来问同学要了代码(额)过了就没再管……现在看到了,接触的底层东西也多了,觉得有必要深究一下。 问题链接(已经有大佬解答了):...
C语言中,整型1用float类型
输出
,为什么会是
0.000000
?
因为编译器在
输出
的时候会先把它转换为double类型(精度高,0多
0.000000
001),然后再转换为float类型,丢失精度,所以我们会看到
0.000000
。有什么问题欢迎留言!~~~~...
计算e的值 e = 1+ 1/1! + 1/2! + 1/3!......
result = 1.000000 / factorial(i); //让e先等于1,然后与每次计算好的阶乘分之一相加 e = e + result; } //打印结果 printf("\ne= %f", e); return 0; } //计算阶乘的函数 float factorial(int a){ //让...
connect() to unix:/dev/shm/php-fcgi.sock failed (11: Resource temporarily unavailable) 问题解决
sigaction 0.00
0.000000
0 13 rt_sigprocmask 0.00
0.000000
0 1 rt_sigreturn 0.00
0.000000
0 78 setitimer 0.00
0.000000
0 26 26 connect 0.00
0.000000
0 15 2 accept 0.00
0.000000
...
C++玄学问题 关于printf
输出
double类型显示
0.000000
的原因
【
输出
错误】:-
0.000000
二、 C++ double类型用 %f 格式
输出
【
输出
正确】 三、 C语言 double类型用 %lf 或 %f 格式
输出
【均
输出
正确】 这让我感到十分玄学,为什么第一种
输出
就不对了呢,double类型为什么不能写%...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章