Java整数乘法输出错误,如何解决该问题?
解决Java中整数乘法溢出导致结果错误的问题
问题重现
Java代码
public class main { public static void main(String[] args) { System.out.println(1101101101*10); } }
执行输出
-1873890878
Python中的正确计算结果
Microsoft Windows [Version 10.0.19044.2251] (c) Microsoft Corporation. All rights reserved. C:\Users\pradeep>python Python 3.10.8 (tags/v3.10.8:aaaf517, Oct 11 2022, 16:50:30) [MSC v.1933 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 1101101101*10 11011011010
问题原因
Java中1101101101和10默认是int类型(32位有符号整数),取值范围为-2147483648到2147483647。而1101101101 * 10 = 11011011010,这个数值远超出int的最大值,触发了整数溢出。Java对溢出的整数会进行循环取模处理,最终得到负数结果。
Python的int类型是动态扩展的,没有固定位数限制,因此可以正确计算大数乘法。
解决方法
要避免溢出,需使用更大范围的long类型(64位有符号整数,取值范围-9223372036854775808到9223372036854775807),有两种常用实现方式:
1. 指定字面量为long类型
在其中一个数字后添加L(推荐大写,避免与数字1混淆),让乘法运算自动以long类型执行:
public class main { public static void main(String[] args) { System.out.println(1101101101L * 10); } }
2. 显式转换类型
将其中一个int值强制转换为long后再计算:
public class main { public static void main(String[] args) { System.out.println((long)1101101101 * 10); } }
两种方式执行后都会输出正确结果:
11011011010
内容的提问来源于stack exchange,提问作者Pradeep Simba
相关产品推荐
相关产品推荐

