社区
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为什么却是对的呢。
...全文
660
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
打赏
举报
回复
期待高手的回答
关于基本数据类型
long
跟
float
默认转换
问题
**
问题
提出: **
float
类型数字在计算机中用4个字节存储
long
类型数字在计算机中用8个字节存储 作运算时,8个字节的
long
类型为什么会转换成4字节的
float
?理论上4个字节的类型是放不下8个字节类型的数据的。 ** 分析: ** 默认转换顺序 byte(1字节)-short(2字节)-int(4字节)-
long
(8字节)-
float
(4字节)-doub...
在Java中如何将
float
转换为
long
或int数据类型?
在Java中,有三种方法可以将
float
转换为
long
或int,但我们只关注
long
数据类型部分。 将
float
数据
类型转换
为
long
值的第一种方法是将auto-box
float
原语转换为
float
对象并调用
long
Value()方法。 这是一种更结构化的方法,因为其他方法只是简单地将
float
转换为
long
或int以去掉小数点。 也可以按照以下提示编写Java程序,通过将
long
方法替换为对应...
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)。 我以前也是简单的记住就算完事了,对于它为什么会这样却没有考虑过。 下面...
java
float
强制转换int类型_在Java中如何将
float
转换为
long
或int数据类型?
在Java中,有三种方法可以将
float
转换为
long
或int,但我们只关注
long
数据类型部分。将
float
数据
类型转换
为
long
值的第一种方法是将auto-box
float
原语转换为
float
对象并调用
long
Value()方法。这是一种更结构化的方法,因为其他方法只是简单地将
float
转换为
long
或int以去掉小数点。也可以按照以下提示编写Java程序,通过将
long
方法替换为对应的in...
C语言
70,020
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章