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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaochenu 中级黑马   /  2016-4-19 07:24  /  8155 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
int类型和float俩个类型哪个比较大?为什么

最佳答案

查看完整内容

float 是单精度,需要在数值后面加“F”或“f“,如果只有5.5则被默认为double类型(双精度),“5 + 5.5”是double 型,float 占用内存只有double 的一半,因此属于向下转型,需要加强制转换,你也可以这样写:float f = 5 + 5.5f;

15 个回复

正序浏览
float类型的数据比较大,这个涉及到一个协议,你可以找基础班视频观看一下
回复 使用道具 举报
float 的类型大
回复 使用道具 举报
纠结帝 发表于 2016-4-19 13:56
float 是单精度,需要在数值后面加“F”或“f“,如果只有5.5则被默认为double类型(双精度),“5 + 5.5 ...

整数类型默认是int类型,小数类型默认是double类型,我把这个忘了,谢谢
回复 使用道具 举报
本帖最后由 lossgel 于 2016-4-19 14:29 编辑

int 类型占用4个字节, 取值范围为   -2^31到2^31-1float 类型占用4个字节, 取值范围为-3.403E38 到3.403E38 属于单精度类型 浮点型
同样占用4个字节,而取值范围不同是由于float类型采用了IEEE754规定,详细见后面
下面讲为什么会报错  


显示找到double类型,需要float,
证明float在进行定义时  系统 默认采用了double类型,  因为double类型比float类型更精确
所以当  a + b 进行计算时, int类型 转换到了double类型, 结果也变为double类型,
定义 c为float类型时, 计算结果  进行强制转换,   则可能损失精度, 所以报错
所以基础视频教程中 明确表明,  定义float 类型时  ,必须加标注 F 或者 f
如下图




    long与float的取值范围谁大谁小
    * 1位是符号位
    * 8位是指数位
    * 00000000   11111111 0到255   0为0   255代表无限大

    * -126到127
    * 23位是尾数位
    * 每个指数位减去127  为-126到127
    * A:它们底层的存储结构不同。
    * B:float表示的数据范围比long的范围要大
        * long:2^63-1
        * float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
  大小顺序为byte,short,char -- int -- long -- float -- double
回复 使用道具 举报
八月抹央 来自手机 中级黑马 2016-4-19 12:23:25
10#
很明显float大
回复 使用道具 举报
wan1137856139 发表于 2016-4-19 09:10
感觉是float的类型大,应该是要加转换符

小的变大的不是会自动类型转换吗?应该不加也可以的,但是大的变小的的话需要强转的,要加强转符,难道我记错了吗

点评

就是啊,大的变小的要加转换符  发表于 2016-4-19 12:43
回复 使用道具 举报
wan1137856139 来自手机 中级黑马 2016-4-19 09:10:58
8#
感觉是float的类型大,应该是要加转换符
回复 使用道具 举报
int和float在32位和64位编译器所占的内存相等,都是4个字节;但是在16位编译器里float所占的内存大4个字节,int占2个字节。
回复 使用道具 举报
byte,short,char -- int -- long -- float -- double
       
        * long: 8个字节
        * float:4个字节
        * IEEE754
        * 4个字节是32个二进制位
        * 1位是符号位
        * 8位是指数位
        * 00000000   11111111
        * 0到255
        * 1到254
        * -126到127
        * 23位是尾数位
        * 每个指数位减去127
       
        * A:它们底层的存储结构不同。
        * B:float表示的数据范围比long的范围要大
                * long:2^63-1
                * float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
回复 使用道具 举报
float大        byte,short,char -- int -- long -- float -- double                  * long: 8个字节         * float:4个字节         * IEEE754         * 4个字节是32个二进制位         * 1位是符号位         * 8位是指数位         * 00000000   11111111         * 0到255         * 1到254         * -126到127         * 23位是尾数位         * 每个指数位减去127                  * A:它们底层的存储结构不同。         * B:float表示的数据范围比long的范围要大                 * long:2^63-1                 * float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
回复 使用道具 举报
AAAheilong 发表于 2016-4-19 08:20
float 大,long=2^63-1,float = 3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1

float f=5+5.5;  比如这个代码.float大不是会自动类型提升吗,但是这个需要加强转float f=(float)(5+5.5);这样才编译通过,是为什么?
回复 使用道具 举报
AAAheilong 来自手机 中级黑马 2016-4-19 08:20:24
藤椅
float 大,long=2^63-1,float = 3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
回复 使用道具 举报
float大,flaot =3.4*10^38 > int =2^31-1
回复 使用道具 举报
xiaochenu 发表于 2016-4-19 08:39
float f=5+5.5;  比如这个代码.float大不是会自动类型提升吗,但是这个需要加强转float f=(float)(5+5.5) ...

float 是单精度,需要在数值后面加“F”或“f“,如果只有5.5则被默认为double类型(双精度),“5 + 5.5”是double 型,float 占用内存只有double 的一半,因此属于向下转型,需要加强制转换,你也可以这样写:float f = 5 + 5.5f;   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马