long freeSize = ((Main.maxSPace-Main.usedSpace)*1000*1000);
maxSpace = 20000
usedSpace = 8
-->freeSize = -1482836480
なぜこれがマイナスの結果になるのですか?
long freeSize = ((Main.maxSPace-Main.usedSpace)*1000*1000);
maxSpace = 20000
usedSpace = 8
-->freeSize = -1482836480
なぜこれがマイナスの結果になるのですか?
maxSpace
およびusedSpace
int として宣言されているため、すべての演算は int で実行されます。結果を long にキャストする場合にのみ、結果を代入しますが、freeSize
それ以前にオーバーフローが発生しています。
1000
番号を次のように置き換えて1000L
、強制がより早く発生するようにしてください。
long freeSize = ((Main.maxSPace-Main.usedSpace)*1000L*1000L);
maxSpace
とは整数であるため、おそらく負の数を取得してusedSpace
います。20000 - 8 = 19992
、これは(2 6319992 * 1000000 = 19992000000
- 1)より小さいですが、 (2 31 - 1)より大きいです。これはまだ int の値の範囲外です。あなたはさせて、長くするべきです。Long.MAX_VALUE
Integer.MAX_VALUE
19992000000 - Integer.MAX_VALUE = 17844516353
maxSpace
usedSpace
maxSpace と usedSpace が int 型の場合、型オーバーフローのために負の値が返されます。maxSpace と usedSpace の両方の変数に対して、代わりに long を使用してください。または、Main のプロパティ タイプを変更できない場合は、コードを次のように変更できます。
long freeSize = ((Main.maxSPace-Main.usedSpace)*1000L*1000L);