社区
C语言
帖子详情
long和float类型转换问题
ruijun12
2009-09-18 08:53:30
float f1 = (float)LONG_MAX;
long l1 = (long)f1;
long l2 = (long)((float)LONG_MAX);
得到的结果是:f1: 2147483648.000000, l1: -2147483648, l2: 2147483647
f1的值不对应该是在类型转换过程中的精度丢失造成的,问题是为什么同样是先转float再转long,l2为什么却是对的呢。
...全文
664
7
打赏
收藏
long和float类型转换问题
float f1 = (float)LONG_MAX; long l1 = (long)f1; long l2 = (long)((float)LONG_MAX); 得到的结果是:f1: 2147483648.000000, l1: -2147483648, l2: 2147483647 f1的值不对应该是在类型转换过程中的精度丢失造成的,问题是为什么同样是先转float再转long,l2为什么却是对的呢。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
LightInDark_pan
2009-09-18
打赏
举报
回复
只是显示变了而已,但是具体在内存中的值是一样的,只不过float有个专门的算法而已。
w0911h
2009-09-18
打赏
举报
回复
float是4字节,存储底数的位数只有23位,应该是不能表示10位有效数字的,但是你的第一种转换竟然能得达那么接近的值,很奇怪
brookmill
2009-09-18
打赏
举报
回复
刚才看了看gcc产生的汇编代码,类型转换的地方眼花缭乱,没看懂。
但是我感觉对于f1和l1,编译器是真刀真枪地转换了一番。
而对于l2,编译器作弊了,直接把2147483647赋值给了l2
brookmill
2009-09-18
打赏
举报
回复
有意思。编译器会不会对l2的转换作了优化?
wanghao111
2009-09-18
打赏
举报
回复
这个具体还要看编译器,不同的编译器中各个类型所占的空间也是不差别的。
james_hw
2009-09-18
打赏
举报
回复
[Quote=引用 3 楼 brookmill 的回复:]
刚才看了看gcc产生的汇编代码,类型转换的地方眼花缭乱,没看懂。
但是我感觉对于f1和l1,编译器是真刀真枪地转换了一番。
而对于l2,编译器作弊了,直接把2147483647赋值给了l2
[/Quote]
感觉有可能是这样
fx397993401
2009-09-18
打赏
举报
回复
期待高手的回答
在Java中如何将
float
转换为
long
或int数据类型?
在Java中,有三种方法可以将
float
转换为
long
或int,但我们只关注
long
数据类型部分。 将
float
数据
类型转换
为
long
值的第一种方法是将auto-box
float
原语转换为
float
对象并调用
long
Value()方法。 这是一种更结构化的方法,因为其他方法只是简单地将
float
转换为
long
或int以去掉小数点。 也可以按照以下提示编写Java程序,通过将
long
方法替换为对应...
关于基本数据类型
long
跟
float
默认转换
问题
**
问题
提出: **
float
类型数字在计算机中用4个字节存储
long
类型数字在计算机中用8个字节存储 作运算时,8个字节的
long
类型为什么会转换成4字节的
float
?理论上4个字节的类型是放不下8个字节类型的数据的。 ** 分析: ** 默认转换顺序 byte(1字节)-short(2字节)-int(4字节)-
long
(8字节)-
float
(4字节)-doub...
java 基本类型
long
,
float
类型转换
float
>
long
即
float
表示范围比
long
大 先看一下它们能表示的范围 public class EqualsTest1 { public void equals1() {
long
lx = 40;
float
fx = 40.1f; System.out.println("
float
len = "+
Float
.SIZE); System.out.
long
类型与
float
类型的转换
最为一个常识,我们都知道浮点型在内存中占用的是4个字节的空间,而
long
型占用的是8个字节的空间。可是为什么4个字节的
float
型的最大值会大于
long
型的最大值呢? 我们都知道,
float
类型的范围是:一3.403E38~3.403E38。而
long
类型的范围是:-2^63~2^63-1(大概是9*10^18)。 我以前也是简单的记住就算完事了,对于它为什么会这样却没有考虑过。 下面...
C语言
70,024
社区成员
243,253
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章