int与Long需要注意的值范围
程序员文章站
2022-06-01 21:59:46
...
今天使用程序计算一个算式,算出的结果一点不对,当时就气死我了。
然后用计算器算了好几遍,先证明自己逻辑没有混乱。
这个算式什么样子?
System.out.println( "不加L,丢失精度:"+(-1387053568*31 + 19287));
运行结果:明显不对。
不加L,丢失精度:-48968361
这个计算肯定超过了int的最大值,所以使用Long算一下,
System.out.println( "加上L,正确结果:"+(-1387053568L*31 + 19287));
结果正确:
加上L,正确结果:-42998641321
接着思考这个是怎么丢失精度的:
先列出int最大,最小值:
System.out.println("测试Integer的值:");
System.out.println( "最大:"+Integer.MAX_VALUE);
System.out.println( "最小:"+Integer.MIN_VALUE);
结果:
测试Integer的值:
最大:2147483647
最小:-2147483648
猜想是不是利用最小的值进行计算的:
System.out.println( "猜想是不是溢出后变成最小值计算,模拟:"+(Integer.MIN_VALUE*31 + 19287));
结果不是用最小值进行计算的,因为与上面的结果不一致:
猜想是不是溢出后变成最小值计算,模拟:-2147464361
看一下这个转换:
int i =-1387053568*31;
System.out.println("输出int溢出值:"+i);
溢出结果:
输出int溢出值:-48987648
最后所有程序:
System.out.println("测试Integer的值:");
System.out.println( "最大:"+Integer.MAX_VALUE);
System.out.println( "最小:"+Integer.MIN_VALUE);
int i =-1387053568*31;
System.out.println("输出int溢出值:"+i);
System.out.println( "加上L,正确结果:"+(-1387053568L*31 + 19287));
System.out.println( "不加L,丢失精度:"+(-1387053568*31 + 19287));
System.out.println( "猜想是不是溢出后变成最小值计算,模拟:"+(Integer.MIN_VALUE*31 + 19287));
结果:
测试Integer的值:
最大:2147483647
最小:-2147483648
输出int溢出值:-48987648
加上L,正确结果:-42998641321
不加L,丢失精度:-48968361
猜想是不是溢出后变成最小值计算,模拟:-2147464361
上一篇: C++入门小知识点(一)
下一篇: python的int()注意事项