先说结论:
在进行数字运算时,如果涉及到向上转换,一定要把要转换的标记为先计算的。
如下:
100+1000000*1000000*10L 结果溢出
100L+1000000*1000000*10 结果溢出
100+1000000L*1000000*10 结果正确
详细:
今天写代码时要算N小时之前的时间戳,有如下代码:
int N = 1000;
long queryTime = System.currentTimeMillis() - N * 1000 * 60 * 60;
当N=1000时候溢出了~~~
于是我把代码改成了如下:
long queryTime = System.currentTimeMillis() - N * 1000 * 60 * 60L;
发现结果是正确的,但是我隐约感觉事情有些不对,于是修改代码如下:
long queryTime = System.currentTimeMillis() - N * 1000 * 60 * 60 * 1L;
结果果然不对,还是溢出的。
于是修改代码如下:
long queryTime = System.currentTimeMillis() - 1L * N * 1000 * 60 * 60;
这回对了。
所以推想这个【向上转换】是有转换时间的,不是如果整个表达式中有出现long就全转成long,然后再运算(好像我隐约记得我在哪里看见过这么样的结论)。
1000 * 1000 * 60 * 60 * 1L的运算顺序应该如下:
1000 * 1000 = 1000000 (int型)
1000000 * 60 = 60000000 (int型)
60000000 * 60 = -694967296 (int溢出)
-694967296 * 1L = -694967296 (先把-694967296转换成long型,值不变,然后乘以1)
同样的道理:
(long)(1000* 1000 * 60* 60) 结果依然溢出
(long)1000* 1000 * 60* 60 结果正确,意义为先把第一个1000变为long
所以最简洁的写法应该为:
1000L* 1000 * 60* 60
分享到:
相关推荐
python数学运算模块 python数学运算模块 python数学运算模块 python数学运算模块 python数学运算模块 python数学运算模块 python数学运算模块 python数学运算模块 python数学运算模块 python数学运算模块 python数学...
本文通过一个简单的例子,剖析不同数据类型的存储结构、运算相互转换及转换中可能出现的问题—溢出,提出避免发生溢出的办法,目的是在教学和实践中得到正确结果。
用“UL”避免Keil C51大整数常量运算溢出错误 在Keil C51中,使用整数常量运算可能出现溢出错误,特别是在处理大整数时。这是因为C51编译器的默认类型整数常量运算可能出现溢出错误。如果不指定大整数的数据类型,...
数学法则、数学运算之对数运算法则、高中数学
本资源是关于农村小学中段数学运算律及简便运算能力培养的实践研究课题结题报告。该报告旨在探讨小学中段数学运算律及简便运算能力培养的实践研究,旨在提高学生计算能力和解决问题能力。 第一,课题的提出: 小学...
Wincc中利用脚本读取变量以及如何进行逻辑运算和数学运算?
"农村小学中段数学运算律与简便运算能力培养的实践分析课题结题报告" 本报告旨在探讨农村小学中段数学运算律与简便运算能力培养的实践研究,旨在提高学生的计算能力和简便运算技巧。通过对农村小学中段数学运算律与...
标签"vhdl_数学"、"vhdl_数学库"、"vhdl_设计"、"数学运算"进一步强调了这个库的核心特性:它是关于VHDL的数学功能,是设计过程的一部分,特别关注于数学计算的实现。这些标签有助于分类和搜索,让其他VHDL设计者能...
计算机组成原理中,溢出问题是指在计算机中进行运算时,结果超出机器数表示范围的现象。溢出问题可以分为正溢和负溢两种情况。正溢是指两个正数相加而绝对值超出允许的范围,负溢是指两个负数相加而绝对值超出允许的...
农村小学中段数学运算律及简便运算能力培养的实践研究报告课题结题报告 本报告旨在探讨农村小学中段数学运算律及简便运算能力培养的实践研究,旨在提高农村小学中年级学生的计算能力,解决农村小学中段数学运算律及...
了解并熟练使用VHDL的基本数学运算库是进行VHDL设计的关键步骤,这能帮助我们更高效地实现数字逻辑系统,并确保其正确性和可移植性。通过不断的实践和学习,设计师能够掌握如何在VHDL中进行复杂的数据运算,从而实现...
"农村小学中段数学运算律与简便运算能力培养的实践研究" 通过对文件的标题、描述、标签和部分内容的分析,我们可以提炼出以下知识点: 一、数学课程标准 * 学生必须经历将一些实际问题抽象为数与代数问题的过程,...
该文件的主要内容是关于一年级学生学习加减混合运算的练习题,文件中包含了多种数学运算规则、数学运算的顺序、数学运算的应用、数学思维模式、数学问题解决方案、数学学习策略、数学知识体系、数学应用场景、数学...
数学运算、应用题400道详解数学数学运算、应用题400道详解运算、应用题400道详解数学运算、应用题400道详解
小学数学“运算能力”文献综述.doc
设V1=, a2}, max >和V2=, b2}, min >是两个数系统, 其中max (x, y)表示x 与y中较大的数;min (x, y)表示 x 与y 中较小的数。...(1)设积代数中的二元运算为*运算,输出它的运算表 (2)输出积代数的单位元和零元
小学数学运算定律.pdf
"四年级数学运算定律及简便运算专项训练题" 本资源摘要信息是四年级数学运算定律及简便运算专项训练题,旨在帮助学生巩固运算定律的知识,提高简便运算的能力。 一、运算定律 运算定律是数学运算的基础,包括加法...
数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲数学运算精讲