`
yuwei2008vip
  • 浏览: 39103 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

谜题3:长整除

 
阅读更多
这个程序会打印出什么呢?
public class LongDivision
{
	public static void main(String args[])
	{
		final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
		final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
		System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);
	}
}

遗憾的是,它打印的是5。这里到底发生了什么呢?
问题在于常数MICROS_PER_DAY 的计算“确实”溢出了。尽管计算的结果适合放入long中,并且其空间还有富余,但是这个结果并不适合放入int 中。这个计算完全是以int 运算来执行的,并且只有在运算完成之后,其结果才被提升到long,而此时已经太迟了:计算已经溢出了。

Java 不具有目标确定类型的特性,这是一种语言特性,其含义是指存储结果的变量的类型会影响到计算所使用的类型。

下面的程序将打印出我们所期望的1000:
public class LongDivision
{
	public static void main(String args[])
	{
		final long MICROS_PER_DAY = 24L * 60 * 60 * 1000 * 1000;
		final long MILLIS_PER_DAY = 24L * 60 * 60 * 1000;
		System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);
	}
}


这个教训很简单:当你在操作很大的数字时,千万要提防溢出——它可是一个缄默杀手。即使用来保存结果的变量已显得足够大,也并不意味着要产生结果的计算具有正确的类型。当你拿不准时,就使用long 运算来执行整个计算。
分享到:
评论

相关推荐

    Java解惑(谜题)CHM中英文双版本

    谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:...

    Java谜题Java谜题1——表达式谜题

    谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:...

    java解惑很全的题目

    ### 谜题 3:长整除 长整除可能涉及到Java的大整数类型`BigInteger`,用于处理超过`long`类型的数值。`BigInteger`提供了除法运算方法,如`divide`,可以处理任意大小的整数除法。 ### 谜题 4:初级问题 这可能是一...

    java 解惑.pdf

    **谜题3:长整除** - **描述**:程序执行长整型除法运算,但由于某些细节问题,结果并不符合预期。 - **解惑**:长整型(`long`)的除法需要特别注意溢出问题以及除数为0的情况。此外,对于负数的处理也需格外小心。...

    Java解惑 PPT1

    **谜题3:长整除** 当涉及大数字计算,如计算一天的微秒数除以毫秒数,如果不使用`long`类型可能会导致溢出。在`MICROS_PER_DAY / MILLIS_PER_DAY`的例子中,由于中间计算过程可能导致整型溢出,因此需要在乘法操作...

    Java谜题解惑 中文版CHM格式

    Java谜题1——表达式谜题 谜题1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转吗? public static boolean isOdd(int i){ return i % 2 == 1; } 奇数可以被定义为被2整除余数为...

    Java Puzzlers 中文版(Java解惑)

    Java 谜题 1——表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转 吗? public static boolean isOdd(int i){ return i % 2 == 1; } 奇数可以被定义为被 2 整除余数...

    python少儿编程基础课趣解数字谜题.pptx

    - `s[1:3:]`:等同于`s[1:3:1]`。 - `s[:3:]`:返回'pyt'。 - `s[1::]`:返回'ython'。 - `s[::-1]`:返回'nohtyp'。 **相反数** 寻找一个三位数加上396后得到的数字与原数字相反,可以通过遍历所有三位数并进行...

    java 解惑.doc

    3. **长整除**:长整数的除法运算可能会有不同于整数除法的规则,谜题3可能是讨论这个话题,特别是当涉及到溢出和取模运算时。 4. **初级问题**:尽管看似基础,但谜题4可能包含了一些初学者容易犯的错误,比如变量...

    五年级下册小学数学思维训练题及答案.doc

    2. 最大公约数(GCD)与最小公倍数(LCM):第2题要求将钢筋截成同样长的小段且无剩余,即寻找三根长度的最大公约数。 3. 序列和:第4题涉及连续自然数的和,需要理解奇数和偶数相加的性质。 4. 因数与倍数:第7题...

    小学奥数知识点梳理全大字.doc

    3. 整除特征:识别一个数是否能被另一个数整除的特征。 4. 整除性质:理解整除与除法的关系。 5. 带余除法:掌握有余数的除法运算。 6. 唯一分解定理:每个正整数可以唯一地表示为素数的乘积。 7. 约数个数与约数和...

    六年级数学下册因数和倍数复习PPT学习教案.pptx

    - 不能被3整除的数:例如61不能被3整除。 - 不能同时被2、3、5整除的数:例如90不是2、3、5的公倍数。 - 可以同时被2和5整除的数:例如50和160的个位都是0。 8. **填空题**: - 最小的质数是2,质数中唯一的...

    java解惑

    按照数学定义,奇数是不能被2整除的整数,即除以2的余数为1。然而,这个方法只在一半的情况下能给出正确的答案,另一半情况则错误地判定负奇数为偶数。 问题的根源在于Java中取余操作符`%`的行为。Java的取余操作符...

    偷奶酪的鼠鼠:一个数学谜题的探索

    第二天,当所有鼠鼠聚集在一起时,它们惊讶地发现,奶酪的总数仍然可以被 n 整除,且剩下了 m 块。 数学问题的提出 这个有趣的现象引发了一个问题:鼠鼠们至少偷了多少块奶酪?这个问题可以转化为一个数学问题,...

    新版苏教版五年级数学上册期中考试题(参考答案).pdf

    2. **数的整除与最大值**:寻找一个能被2、3、5整除的三位数,且十位是最小的质数(2),这个三位数最大是720。这需要理解数的整除性质和质数概念。 3. **几何与周长**:计算长方体框架的所需铁丝长度,即长方体的...

    新版人教版五年级数学上册期中考试题带答案.pdf

    - 能同时被2、3、5整除的最大的三位数,即100以内2、3、5的最小公倍数,也就是30的倍数,找到最大的一个。 9. **数字谜题**: - 一把钥匙对应四把锁中的某个数字,需要通过排除法或逻辑推理来解决。 10. **小数...

Global site tag (gtag.js) - Google Analytics