Rak*_*esh -3 java int numbers long-integer
可能重复:
Java问题 - 背后的原因和可能的输出是什么
long milli=24*60*60*1000;
long micro=24*60*60*1000*1000;
long result=micro/milli;
Run Code Online (Sandbox Code Playgroud)
结果应该是1000但不是.我使用时为什么会这样24*60*60*1000*1000L?
有人能告诉我这个的原因吗?
麻烦的是计算是在ints上进行然后再进行计算long,不幸的是24*60*60*1000*1000将不适合int和包装.你可以做点什么
long micro=24L*60*60*1000*1000;
Run Code Online (Sandbox Code Playgroud)
强制最后一次乘法在longs上完成.
很容易,如果你知道,但总是一个惊喜;)
文字1000是一个int值,因此多重操作使用整数而不是长整数.
long micro=24*60*60*1000*1000;
Run Code Online (Sandbox Code Playgroud)
被解释为
long micro = (long) ((int) 24*60*60*1000*1000);
Run Code Online (Sandbox Code Playgroud)
而500654080不是86400000000
在表达式中至少使用一个长文字,这会强制整个计算在以下位置完成long:
long milli=24*60*60*1000;
long micro=24*60*60*1000*1000 * 1L; // forces a calculation in long
long result=micro/milli;
Run Code Online (Sandbox Code Playgroud)