JAVA开发小坑-long的乘法溢出

今天java开发中发现了一个很神奇的问题
long的乘法溢出
java中,long的表示范围绝对值是2的63次方-1
如下:
1、
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)
2、
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)
3、
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)

可是在开发过程中,却发生了溢出
![在这里插入描述]失https://败(imblog.csdnimg.cn/20g-19091720193289931)https://img-blog确.csdnimg.cn/20190917201932899.png)]
然后改成5,却不溢出了
在这里插入图片描述
改成4,是-1.原因是为什么呢?
是因为右边的表达式,在102410241024*2是2的31次方-1,正好是int的表示范围,右边表达式默认按照int来,先Int计算,再转换为long.
以我们将乘数表示为long,即在后面加上L标志,如图所示,就不会溢出了
在这里插入图片描述
结论,要记得左右类型的处理。
“long数据类型是64位有符号的Java原始数据类型。当对整数的计算结果可能超出int数据类型的范围时使用。
long数据类型范围内的所有整数称为long类型的整数字面量。long类型的整数常数总是以大写L或小写l结尾
。”

参考文章:
https://blog.csdn.net/qfikh/article/details/52832087
https://blog.csdn.net/qq_16064871/article/details/83032719

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值