黑马程序员技术交流社区

标题: int 和float类型哪个大?为什么? [打印本页]

作者: xiaochenu    时间: 2016-4-19 07:24
标题: int 和float类型哪个大?为什么?
int类型和float俩个类型哪个比较大?为什么

作者: 纠结帝    时间: 2016-4-19 07:24
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;   
作者: liudh1    时间: 2016-4-19 07:56
float大,flaot =3.4*10^38 > int =2^31-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
作者: xiaochenu    时间: 2016-4-19 08:39
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);这样才编译通过,是为什么?
作者: 日月当空    时间: 2016-4-19 08:54
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
作者: 日月当空    时间: 2016-4-19 08:56
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

作者: nlfdnxb    时间: 2016-4-19 09:10
int和float在32位和64位编译器所占的内存相等,都是4个字节;但是在16位编译器里float所占的内存大4个字节,int占2个字节。
作者: wan1137856139    时间: 2016-4-19 09:10
感觉是float的类型大,应该是要加转换符
作者: xiaochenu    时间: 2016-4-19 09:59
wan1137856139 发表于 2016-4-19 09:10
感觉是float的类型大,应该是要加转换符

小的变大的不是会自动类型转换吗?应该不加也可以的,但是大的变小的的话需要强转的,要加强转符,难道我记错了吗
作者: 八月抹央    时间: 2016-4-19 12:23
很明显float大
作者: lossgel    时间: 2016-4-19 14:24
本帖最后由 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

作者: xiaochenu    时间: 2016-4-19 15:17
纠结帝 发表于 2016-4-19 13:56
float 是单精度,需要在数值后面加“F”或“f“,如果只有5.5则被默认为double类型(双精度),“5 + 5.5 ...

整数类型默认是int类型,小数类型默认是double类型,我把这个忘了,谢谢
作者: 冰刃    时间: 2016-4-24 17:58
float 的类型大
作者: jackymj    时间: 2016-6-7 22:05
float类型的数据比较大,这个涉及到一个协议,你可以找基础班视频观看一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2