`
yuwei2008vip
  • 浏览: 38664 次
  • 性别: 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:...

    iava解惑,深入剖析java

    谜题3:长整除 长整除可能涉及到`long`类型的使用。在进行大整数除法时,若结果超过了`int`类型的范围,需要使用`long`类型进行计算,例如`long result = dividend / divisor;`。 谜题4:初级问题 这个谜题可能涵盖...

    java 解惑.pdf

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

    Java解惑 PPT1

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

    java谜题中文版

    此方法基于奇数的定义:任何不能被2整除的整数。`i % 2`计算`i`除以2的余数,理论上,如果结果是1,则`i`是奇数。然而,这个方法存在严重缺陷。 **问题解析:** Java的取余操作符 `%` 的行为,在负数参与运算时,...

    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 整除余数...

    java 谜题95

    按照定义,奇数是指不能被2整除的整数,即除以2的余数为1的整数。 然而,这段代码存在一个问题:它仅在整数`i`为正奇数时能正确工作。当`i`为负奇数时,该方法会错误地返回`false`。这是因为Java中取余操作符 `%` ...

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

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

    五年级下册小学数学思维训练题及答案.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 块。 数学问题的提出 这个有趣的现象引发了一个问题:鼠鼠们至少偷了多少块奶酪?这个问题可以转化为一个数学问题,...

    小学数学数学故事唐僧师徒摘桃子

    这个故事实际上是一个基于数学的谜题,涉及到整除和同余的概念。让我们通过解析三个徒弟的描述来解这个问题。 首先,八戒说他的桃子数是3的倍数加1,即可以表示为3n + 1的形式,其中n是一个整数。同样,沙僧的桃子...

Global site tag (gtag.js) - Google Analytics