这个程序会打印出什么呢?
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 运算来执行整个计算。
分享到:
相关推荐
谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:...
谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:...
### 谜题 3:长整除 长整除可能涉及到Java的大整数类型`BigInteger`,用于处理超过`long`类型的数值。`BigInteger`提供了除法运算方法,如`divide`,可以处理任意大小的整数除法。 ### 谜题 4:初级问题 这可能是一...
**谜题3:长整除** - **描述**:程序执行长整型除法运算,但由于某些细节问题,结果并不符合预期。 - **解惑**:长整型(`long`)的除法需要特别注意溢出问题以及除数为0的情况。此外,对于负数的处理也需格外小心。...
**谜题3:长整除** 当涉及大数字计算,如计算一天的微秒数除以毫秒数,如果不使用`long`类型可能会导致溢出。在`MICROS_PER_DAY / MILLIS_PER_DAY`的例子中,由于中间计算过程可能导致整型溢出,因此需要在乘法操作...
Java谜题1——表达式谜题 谜题1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转吗? public static boolean isOdd(int i){ return i % 2 == 1; } 奇数可以被定义为被2整除余数为...
Java 谜题 1——表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转 吗? public static boolean isOdd(int i){ return i % 2 == 1; } 奇数可以被定义为被 2 整除余数...
- `s[1:3:]`:等同于`s[1:3:1]`。 - `s[:3:]`:返回'pyt'。 - `s[1::]`:返回'ython'。 - `s[::-1]`:返回'nohtyp'。 **相反数** 寻找一个三位数加上396后得到的数字与原数字相反,可以通过遍历所有三位数并进行...
3. **长整除**:长整数的除法运算可能会有不同于整数除法的规则,谜题3可能是讨论这个话题,特别是当涉及到溢出和取模运算时。 4. **初级问题**:尽管看似基础,但谜题4可能包含了一些初学者容易犯的错误,比如变量...
2. 最大公约数(GCD)与最小公倍数(LCM):第2题要求将钢筋截成同样长的小段且无剩余,即寻找三根长度的最大公约数。 3. 序列和:第4题涉及连续自然数的和,需要理解奇数和偶数相加的性质。 4. 因数与倍数:第7题...
3. 整除特征:识别一个数是否能被另一个数整除的特征。 4. 整除性质:理解整除与除法的关系。 5. 带余除法:掌握有余数的除法运算。 6. 唯一分解定理:每个正整数可以唯一地表示为素数的乘积。 7. 约数个数与约数和...
- 不能被3整除的数:例如61不能被3整除。 - 不能同时被2、3、5整除的数:例如90不是2、3、5的公倍数。 - 可以同时被2和5整除的数:例如50和160的个位都是0。 8. **填空题**: - 最小的质数是2,质数中唯一的...
按照数学定义,奇数是不能被2整除的整数,即除以2的余数为1。然而,这个方法只在一半的情况下能给出正确的答案,另一半情况则错误地判定负奇数为偶数。 问题的根源在于Java中取余操作符`%`的行为。Java的取余操作符...
第二天,当所有鼠鼠聚集在一起时,它们惊讶地发现,奶酪的总数仍然可以被 n 整除,且剩下了 m 块。 数学问题的提出 这个有趣的现象引发了一个问题:鼠鼠们至少偷了多少块奶酪?这个问题可以转化为一个数学问题,...
2. **数的整除与最大值**:寻找一个能被2、3、5整除的三位数,且十位是最小的质数(2),这个三位数最大是720。这需要理解数的整除性质和质数概念。 3. **几何与周长**:计算长方体框架的所需铁丝长度,即长方体的...
- 能同时被2、3、5整除的最大的三位数,即100以内2、3、5的最小公倍数,也就是30的倍数,找到最大的一个。 9. **数字谜题**: - 一把钥匙对应四把锁中的某个数字,需要通过排除法或逻辑推理来解决。 10. **小数...