Java中long类型和float到底谁大谁小?

原文链接:https://blog.csdn.net/weixin_44296929/article/details/106902749

1、Java中进行混合运算的时候,byte,short,char不会互相转换,都会自动类型提升为int类型,其他类型进行混合运算时,小的数据类型提升为大的数据类型。

下面进行简单的类型转换排序:byte,short,char(不互相转换)-> int -> long -> float -> double。

通过上面可以看出在混合运算是long会转换为float,而实际上long占八个字节,float只占四个字节,那么到底谁大谁小呢?

class DataTypeConversion{
	public static void main(String[] args){
		float f = 12.3f;
		long l = 12345;
		f = l;
		System.out.println(f);
	}
}

正常输入12345.0,可见float是可以存储long的值的。

class DataTypeConversion{
	public static void main(String[] args){
		float f = 12.3f;
		long l = 12345;
		l = f;
		System.out.println(l);
	}
}

编译出错:可能丢失精度。可以通过l = (long)f;来进行强制转换,可见long是装不下float的值的。

2、通过二进制来分析为什么八个字节的long比四个字节的float小:

float 占四个字节:

  1. 一个字节是八个二进制位,float四个字节相当于32个二进制位
  2. 最左边的1位代表的是符号位
  3. 后面的23位代表尾数位(小数位,最大也无非是无限接近于1,不影响其整个float的取值,可忽略不计)
  4. 剩下的8位(32 - 1 - 23)就是关键的指数位,二进制表示为:00000000 ~ 111111111 取值范围为0 ~ 255,
  5. 根据IEEE 754规定,其中0代表0,255代表无穷大,去除两个最值,中间的范围为1 - 254,
  6. 规定每个指数要减去127,所以范围为:-126 ~ 127,即 最大值为2127,远远大于long类型的最大值:263-1.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值