Ear*_*ing 0 java overflow division
我真的对此感到困惑.我正在划分两个正数并得到一个负面结果(我正在使用Java).
long hour = 92233720368L / (3600 * 1000000 );
Run Code Online (Sandbox Code Playgroud)
我得到结果-132.
但如果我将它们分成两个长数字,我得到了正确的结果:
long hour1 = 92233720368L / (3600000000L );
Run Code Online (Sandbox Code Playgroud)
然后我得到结果:25
我想知道它为什么会发生......
先感谢您!:)
您必须L在结尾添加3600或1000000:
例:
long hour = 92233720368L / (3600 * 1000000L );
Run Code Online (Sandbox Code Playgroud)
这是什么是hapenning:
System.out.println(3600 * 1000000); // Gives -694967296 because it exceeds the max limit of an integer size. So 92233720368L / -694967296 = -132
Run Code Online (Sandbox Code Playgroud)
这正是你所在部门发生的事情,支配者是一个整数,因为我上面说的原因被认为是负数.因此,为了考虑类型的乘法结果,long您应该在L之后3600或之后添加1000000
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |