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およびusedSpaceint として宣言されているため、すべての演算は 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_VALUEInteger.MAX_VALUE19992000000 - Integer.MAX_VALUE = 17844516353maxSpaceusedSpace
maxSpace と usedSpace が int 型の場合、型オーバーフローのために負の値が返されます。maxSpace と usedSpace の両方の変数に対して、代わりに long を使用してください。または、Main のプロパティ タイプを変更できない場合は、コードを次のように変更できます。
long freeSize = ((Main.maxSPace-Main.usedSpace)*1000L*1000L);