long
をint
に変換したい。
long
> int.MaxValue
の値の場合、ラップアラウンドさせていただきます。
最善の方法は何ですか?
(int)myLongValue
を実行してください。 unchecked
コンテキスト(コンパイラーのデフォルト)で、必要なこと(MSBの破棄とLSBの取得)を正確に行います。値がOverflowException
に収まらない場合、checked
コンテキストでint
をスローします。
int myIntValue = unchecked((int)myLongValue);
Convert.ToInt32(myValue);
Int.MaxValueより大きい場合はどうなるかわかりませんが。
実際の値に実際に興味がなくても、checksum/hashcodeとしての使用に興味がある場合があります。この場合、組み込みメソッドGetHashCode()
が適切な選択です。
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
安全で最速の方法は、キャストする前にビットマスキングを使用することです...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
Intサイズはマシンに依存するため、ビットマスク(0xFFFFFFFF
)値はIntのサイズに依存します。
しません
(int) Math.Min(Int32.MaxValue, longValue)
数学的に言えば、正しい方法ですか?