java长整除问题浅谈
发布时间:2023-05-22 06:06:23
标签:java,长整除
public class Change{
public static void main(String args[]){
final long L1=24* 60 * 60 * 1000 * 1000;
final long L2=24* 60 * 60 * 1000;
System.out.println(L1/L2);
}
}
/**
* output: 5
*/
为什么输出的是5呢?
再看下面的代码输出:
public class Change{
public static void main(String args[]){
final long L1=24L* 60 * 60 * 1000 * 1000;
final long L2=24L* 60 * 60 * 1000;
System.out.println(L1/L2);
}
}
/**
* output: 1000
*/
这个的输出才是我们想要的结果。到底发生了什么?
这是因为常数L1的计算“确实”溢出了。尽管计算的结果适合放入long中,并且其空间还有富余,但这个结果并不适合放入int中。这个计算完全是以int运算来执行的,并且只有在运算完成之后,其结果才被提升到long,而此时已经太迟了:计算已经溢出了,它返回的是一个小了200倍的数值。从int到long是一种拓宽原始类型转换,它保留了(不正确的)数值。这个值之后被L2整除,而L2的计算是正确的,因为它适合int运算。这样整除的结果就得到了5。
那为什么是int运算来执行的呢?因为所有乘在一起的因子都是int数值。当你将两个int数值相乘时,你将得到另一个int数值。java不具有目标确定类型的特性,只是一种语言特性,其含义是指存储结果的变量的类型会影响到计算所使用的类型。
通过使用long常量来替代int常量作为每一个乘积的第一个因子,就可以很容易的订正这个程序。
这个教训很简单:当你在操作很大的数字时,千万要提防溢出,即使用来保存结果的变量已显得足够大,也并不意味着产生结果的计算具有正确的类型。当你拿不准时,就使用long运算来执行整个计算。


猜你喜欢
- 1.构建springboot项目2.打包应用3.编写dockerfile4.构建镜像5.发布运行![root@localhost demo]
- /// <summary> /// 汉字转拼音缩写 /// </summary> /// <param nam
- 拖曳小球WPF的拖曳效果,基本配置一下,就可以了,但是自绘的话,就得自己控制,按键点击,按键移动和按键松开的事件,与其配合达到目的。这个效果
- 有兴趣的朋友可以回顾一下前两篇java并发编程专题(一)----线程基础知识java并发编程专题(二)----如何创建并运行java线程在现
- 通过拍照或相册中获取图片,并进行裁剪操作,然后把图片显示到ImageView上。 当然也可以上传到服务器(项目中绝大部分情况是上传
- 目录环境依赖数据源方案一 使用 Spring Boot 默认配置方案二 手动创建脚本初始化使用 JdbcTemplate 操作实体对象DAO
- 本文实例为大家分享了java实现转圈打印矩阵的具体代码,供大家参考,具体内容如下给定一个整形矩阵Matrix,请按照顺时针方向转圈的方式,输
- 1. 概述官方JavaDocsApi: javax.swing.JLabelJLabel,标签。标签主要用于展示 文本 或 图片,也可以 同
- 在程序开发中通常有推送消息的需求,通常为短信服务,邮件,电话提醒。短信及电话提醒通常需要向运营商购买服务调用接口,比较麻烦。邮件信息推送也是
- 优麒麟Ubuntu20.04中使用VS Code。VS Code的版本是1.48.0。以下内容仅限于上述环境,对于Windows环境下的使用
- 本文实例为大家分享了Java实现学生管理系统的具体代码,供大家参考,具体内容如下package BookDemo_1; import jav
- 1、首先看一下下面两个sql语句的区别:<select id="selectByNameAndPassword"
- 在网上拷贝的所有阿里云镜像比如:<mirror> <id>nexus-aliyun</id>
- 前言在RocketMQ中为,我们创建消息生产者时,只需要设置NameServer地址,消息就能正确地发送到对应的Broker中,那么Rock
- 本文实例分析了Winform窗体效果。分享给大家供大家参考。具体如下:using System;using System.Collectio
- ShardingSphereShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、
- 一.继承的类型在面向对象的编程中,有两种截然不同继承类型:实现继承和接口继承1.实现继承和接口继承*实现继承:表示一个类型派生于基类型,它拥
- 本文实例为大家分享了android传送照片到FTP服务器的具体代码,供大家参考,具体内容如下在安卓环境下可以使用,在java环境下也可以使用
- JDK8已发布,写了一个datetime时间函数使用方法的小示例package datetime;import static java.ti
- 井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数