社区
C语言
帖子详情
float和int的相互转化输出
haofang666777
2012-09-06 02:11:01
float x,y;
x=5;
y=3;
printf("x=%d y=%d\n",x,y);
return 0;
输出 0和1075052544
int main()
{
printf("%f",5);
printf("%d",5.01);
return 0;
}
输出 0和一个很大的数
哪位高手能够解释一下?不胜感激。
...全文
4341
15
打赏
收藏
float和int的相互转化输出
float x,y; x=5; y=3; printf("x=%d y=%d\n",x,y); return 0; 输出 0和1075052544 int main() { printf("%f",5); printf("%d",5.01); return 0; } 输出 0和一个很大的数 哪位高手能够解释一下?不胜感激。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
AnYidan
2012-09-14
打赏
举报
回复
[Quote=引用 9 楼 的回复:]
引用 8 楼 的回复:
用printf打印格式和类型不匹配的值 结果不可预料
结果预料起来很费劲而已。
[/Quote]
你违反规则在先,就不要责怪别人不守规矩
startservice
2012-09-14
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
用printf打印格式和类型不匹配的值,结果是不可预料的。
[/Quote]
++
感觉在继续
2012-09-13
打赏
举报
回复
用printf打印格式和类型不匹配的值,结果是不可预料的。
常如意
2012-09-13
打赏
举报
回复
float当按照int输出时,系统会取前四个字节
noal0502
2012-09-13
打赏
举报
回复
Int, float, double 之间的相互转换:
Int :在.NET中,int是一个有符号32位整数 ,无论处理器是32位还是64位。它的.NET框架类型是System.Int32 。
Float:单精度浮点数,32位长度,1位实数符号位(原码表示),1位指数符号位,7位指数位(此八位为移码表示)以及23位数据位(补码表示),在.net中又称为Single。
Double: 64位长度的双精度浮点数,1位符号位,11位指数位,52位数据位。
三者的关系:int可以隐式转换成float和double;float只能强制转换成int,但是可以隐式转换成double;double只能强制转换成float和int。
晚安_好梦
2012-09-13
打赏
举报
回复
[Quote=引用 9 楼 的回复:]
引用 8 楼 的回复:
用printf打印格式和类型不匹配的值 结果不可预料
结果预料起来很费劲而已。
[/Quote]
恩,个人结果是可以预料的。只是算起来比较费劲而已,顶9楼。
赵4老师
2012-09-06
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
用printf打印格式和类型不匹配的值 结果不可预料
[/Quote]
结果预料起来很费劲而已。
常如意
2012-09-06
打赏
举报
回复
用printf打印格式和类型不匹配的值 结果不可预料
iamnobody
2012-09-06
打赏
举报
回复
http://en.cppreference.com/w/cpp/io/c/fprintf
用正确的格式符 来输出!!!!!
wanglu343280746
2012-09-06
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
首先解释float x=5;printf("x=%d",x);float型数据在计算机中以IEEE754标准存储第一位为符号位,接下来八位是指数位,后23位为有效数字位,具体规则参照IEEE754,5的机器表示为0 10000001 0100 0000 0000 0000 0000 000,之后还有一个规则,机器在存储浮点数的时候 会以双精度的形式存储,此时就涉及到将单精度转换为双精度的问题,二进……
[/Quote]
学习了
tjl63433
2012-09-06
打赏
举报
回复
首先解释float x=5;printf("x=%d",x);float型数据在计算机中以IEEE754标准存储第一位为符号位,接下来八位是指数位,后23位为有效数字位,具体规则参照IEEE754,5的机器表示为0 10000001 0100 0000 0000 0000 0000 000,之后还有一个规则,机器在存储浮点数的时候 会以双精度的形式存储,此时就涉及到将单精度转换为双精度的问题,二进制表示为0 10000000001 0100 0000 0000 0000(之后还有36个0),以%d输出时,取后32位,所以输出值为0,对5.01用此种办法转换,也讲得出期望值;
接下来,说一下printf("x=%d y=%d\n",x,y);此时y的输出值只于参数表中的有关,即实际上参数表中的y实际上没有传到函数里面,你可以试一下输出printf("x=%d y=%d\n",x);与刚才的输出相同。
辛苦打的,新人求分。
AndyZhang
2012-09-06
打赏
举报
回复
你可以按照IEEE754将5.01转换为字节保存,然后按照int读出,,看看是多少
AndyZhang
2012-09-06
打赏
举报
回复
你要知道float在内存中是如何保存的,是按照IEEE规范的,所以当按照int输出时,系统会取前四个字节,这四个字节可能是float数的指数或者头或者尾的组合,这个值应该是这样的。但是如果你强制转换的话,就不一样了,系统会把float转int保存,这样估计你就能输出5了
图灵狗
2012-09-06
打赏
举报
回复
用printf打印格式和类型不匹配的值,结果是不可预料的。
珍惜生命远离CPP
2012-09-06
打赏
举报
回复
老问题了。
http://topic.csdn.net/u/20090305/22/6365501d-844e-4fd4-9905-ac1c703ba05a.html
第八节 数据类型的转换
可以看见我们把一个整数存储为一个字符串类型,
输出
字符串类型时候,会自动判定我们定义的数据类型,但这会不会破坏原有的数据值呢,当然不会,我们来看,
输出
数据类型后让其直接
输出
数据值,会看到内容并没有受到影响。我们再看下面这种情况,很显然,我们知道了数据类型转换的基本原则:万物皆可转字符串,如果想将字符串转换成一个数字,那必须字符串的内容全是数字才可以。转换语句和之前学的数据类型语句是相同的原理,都是带有结果的(返回值),可以直接用pr
int
输出
,也可以将他的值储存在一个变量里面。
JXI C# DSP-Core Library Numerics: Vecter Converter Overview
聚星仪器 C# DSP-Core Library Numerics: Vector Converter的功能概览。 使用其中的方法可将输入数组转换为各种类型。
C语言的
int
,
float
,double
相互
转化
(从本质上理解可能的问题)
从学了C语言之后,一直习惯于C/C++任意的强制
转化
,但是C语言的强制
转化
却总是带来意想不到的后果,在这里,我将从
int
,
float
,double的本质上讲解这些可能出现的问题以及解决办法,在下面你将看到: OK,现在好戏开始。
int
unsigned
int
: unsigned
int
所进行的是模数计算,就是正常的二进制相加减,计算方法和十进制加减并无区别,但是unsigned
python字符串和
int
,
float
相互
转化
(1)str转为
int
或者
float
如果是一个变量,则直接类型
转化
: vr=666 >>> vr 666 >>> str(vr) '666' >>>
int
(vr) 666 但是大部分情况是对list数据进行
转化
,则:方法一:使用map(eval,vr)>>> vr=['1','2','3'] >>>
详细讲解
int
、
float
与double的区别
最近为了看一下
float
的精确度仔细看了一下这三种数据在内存中的样子,看了一下别人的博客发现大家对精度都有这不同的定义,我自己也简单画了一下。 下面来主要讲解一下
int
、
float
与double三者的区别与详解 一、
int
(最简单的一种)
int
数据类型在内存中占用了4个字节byte(4*8个bit比特)就是32个比特位。第一位代表
int
的正负,后31位存储数据。当
int
取最大值时相当于31个1(1*2^30+1*2^29+1*2^28+....+1*2^0)可以
转化
为有32位切为1其他为0之后再减去
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章