Java int 乘法溢出问题
Java int 乘法溢出问题
java中,高精度变量和低精度变量运算,结果会被提到高精度上;但是如果同样精度的变量运算,只是保存结果的变量精度更高的话,其实并不能避免溢出,因为这样运算的返回类型依然是原精度的类型,只是最后赋值的时候将一个低精度的结果赋值给了一个高精度变量上。其实是这样的运算过程:
- 在乘方时 Java 发现结果已经超出了 int 基本数据类型的最大范围(2147483647),于是作了默认的类型提升(type promotion),中间结果做为 long 类型存放,返回结果时目标数据类型 int 不能够容纳下结果,于是根据 Java 的基础类型的变窄转换(Narrowing primitive conversion)规则,把结果宽于 int 类型宽度的部分全部丢弃,也就是只取结果的低 32 位
- 而最后将int类型的结果变量赋值给一个高精度的Long
所以,为了避免数据溢出,我们需要让参与运算的变量类型不能全是int,例如:
double d=1024d * 1024 * 1024 * 1024;
,加了d,使得一个变量类型变成了double就够了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2019-06-28 [转载]判断一个数是否为素数
2019-06-28 [转载]C++二维动态数组memset()函数初始化
2019-06-28 [转载]快速幂与矩阵快速幂