A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙运强 黑马帝   /  2011-9-17 14:44  /  3863 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

long是8个字节,而float是4个字节。怎么long相对于float是低级数据类型了,相互怎么转化,详细说说所占内存大小及范围变化。

2 个回复

倒序浏览
黑马网友  发表于 2011-9-17 16:12:39
沙发
long类型可以隐式转换为float类型。
隐式转换也叫自动类型转换,即当我们要将一个变量类型中的值赋给另外一种类型的变量时,如果被赋值的变量字节大小大于准备赋值的变量字节大小,就可以自动转换成被赋值的变量类型。

但是这里long是8个字节,而float是4个字节,为什么反而能隐式转换呢?

两者表示数据的方式不一样,float采用IEEE的表示法,而long是用位数来控制的范围。
long和float从根本上讲它们表示的不是一类数,前者是精确值,而后者是非精确值。
float的字节宽度没有long大,但它的表现值宽度要宽得多,因此long到float是没有问题的。
long   -9.2*10^18     ~~     9.2*10^18
float   -3.4*10^38     ~~   3.4*10^38
可以看出来float表示的范围要比long的范围大,尽管float的位数少。
所以,占用内存多不表示它允许的取值范围大,long隐式转换成float只可能发生精确度下降,但不会导致数据丢失。
回复 使用道具 举报
似乎很在理,这题却是不大明白。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马